C语言字母排列组合的实现

曹玉坤

2011-6-21

目录

概述3

需求3

规律3

实现算法5

难点6

代码6

概述

本文档概述字母排列组合的实现算法和分析过程,着重强调在

解决问题前,对问题的思考方法;注重研究问题的思路。从问题需求

开始详述解决问题的过程。

需求

26

我们要解决的问题是,在 个字母中取出任意多个进行排列组

合并把他们的组合方式打印出来。并要求用递归的方式实现。

规律

从要求中可以看出,需要使用递归的方式来解决问题。这是对我

们很好的提示。大家知道递归时用在f(n)和f(n-1)之间有计算关系的,

也就是说通过对f(n-1)的计算处理就能够得到f(n)的结果。最终在n

等于某个具体的数值时,我们能确切的算出f(n)的值,也就是要给我

们一个基点。

通过以上分析,就明确了我们的需要做的工作:第一,我们要找

到f(n)和f(n-1)之间的规律;第二我们要找出那个基点,也就是能确

切给出f(n)值的点。

我们先来看看下面的字母排列:

a

ba ab

cba cab bca acb bac abc

dcba dcab dbca dacb dbac dabc cdba cdab …

… …

大家从上面的例子看出来规律没有?相信大家从上面的排列中

一眼就能看出各个数列直接的关系,那就是:新添字母总是按照顺序

a, b

插入到原有排列的之间。如第一列是 第二列就是新添字母 先添

a a

加到排列 的前面,然后再排列到 的后面,这样就形成了第二行的

baab c ba c

排列 。第三行排列如规律: 先排列到 的前面, 再排列到

ab c b a bca, c ab

的前面,下来 排列到 后 前形成 其次 排列到 的中间

acb c ba bac, c ab

形成 ;接着 又排到 后面,形成 然后 再排列到 后面

abc

形成 。这样我们就得到了第三行的字母排列。相信大家已经会按

规律排列第四行的字母排列了。

规律已经找到,那么我们选择几个字母作为基点呢?如上图排

列,我们可以轻松的罗列出来一个字母时的排列,两个字母时的排列,

三个字母时的排列,四个的时候,虽然我们也能根据规律将其罗列出

来,但已经比较麻烦了。那么我们的基点必然就是选择n 1,2,3 中的

一个了。到底哪一个,现在先不讲,看完后面的大家就明白了怎样选

取递归用的基点。

实现算法

上一节我们已经分析了递归用的f(n)和f(n-1)之间的规律。现在

我们看看递归中基点的选取。我们举个例子来说明,字母为a、b、c、

d 、e 、f 、g 、h 、i 、g….等等,首先看 f(1) a; f(2) ba, ab;

f(3) cba,cab,bca,acb,bac,abc。我们看看先哪个做基点比较好。

首先我们假定以f(1)为基点。f(1) char [1] {a}那么相对于f(2)应

该怎么算呢?因为数组必须初始化长度,所以这里我们用到malloc

动态申请存储空间。这样我们先计算要申请空间的大小。N 个不同字

母组成个数为Pn N!,总长度应为N*N!。f(2)的空间为2*1*2 4。应该

动态

用c语言实现字母排列组合,C语言字母排列组合的实现.pdf相关推荐

  1. 用c语言实现字母排列组合,C语言字母排列组合的实现.doc

    C语言字母排列组合的实现.doc C语言字母排列组合的实现曹玉坤2011-6-21目录概述3需求3规律3实现算法5难点6代码6概述 本文档概述字母排列组合的实现算法和分析过程,着重强调在解决问题前,对 ...

  2. 三个字母排列组合c语言,n个球的排列组合算法

    /*算法说明: 问题:现在有n个球,分别编号为1,2,3···n,对这n个球有多少种不重复的排列,列出所有的排列. 解:由数学知识可知:第一个球有n种选择,第二个球有n-1个选择··所以共有n!种选择 ...

  3. 一个排列是某些对象的有序组合,例如,3124 就是数字 1,2,3,4 的一种可能排列。 如果所有的排列按照数值或者字母序排序,我们称其为一个字典序。 0, 1, 2 的字典排列有:012 021 1

    字典排列 一个排列是某些对象的有序组合,例如,3124 就是数字 1,2,3,4 的一种可能排列. 如果所有的排列按照数值或者字母序排序,我们称其为一个字典序. 0, 1, 2 的字典排列有:012 ...

  4. 排列组合 C语言实现

    #include <stdio.h> #include <stdlib.h>int array[] = {1,2,3,4};#define N 4 #define M 3 in ...

  5. 字母出现频率c语言,统计字母的使用频率c语言实现

    void main(){char ch; // ch用于一次接收一个字符int i,s [26] = {0}; //数组s []用于计算每个小写字母printf的数量("请输入一个字符串: ...

  6. c语言将字母的acsaii,C语言上机实验 答案

    <C语言上机实验 答案>由会员分享,可在线阅读,更多相关<C语言上机实验 答案(31页珍藏版)>请在装配图网上搜索. 1.实验一 上机操作初步(2学时)一.实验方式:一人一机二 ...

  7. 组合学:26个字母(含大小写)和10个数字组合为4位串的可能性测算

    使用26个字母(含大小写,实际为52个字母)和10个数字组合一个4位的串码,问有多少种组合? 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k' ...

  8. c语言如何判断输入字母个数,C语言 输入一个字符,判断该字符是数字、字母、空格还是其他字符。...

    三个空分别是: 1.ch >= 'a'&&ch<='z' || a>='A'&&ch<='Z' 2. ch >= '0' &&am ...

  9. R语言ggplot2可视化:可视化多个图像并组合起来(如果没有对齐,看着丑陋))、保证组合的图像图像区域对齐或者图像整体对齐(Align plot areas in ggplot)

    R语言ggplot2可视化:可视化多个图像并组合起来(如果没有对齐,看着丑陋)).保证组合的图像图像区域对齐或者图像整体对齐(Align plot areas in ggplot) 目录

最新文章

  1. 远控软件VNC***案例研究
  2. JDeodorant 的使用
  3. 会计的思考(3):通过公司例会制度加强财务管理职能
  4. Solr+Hbase多条件查(优劣互补)
  5. apache shiro_Apache Shiro第3部分–密码学
  6. editplus来编写SQL
  7. java 1.8有没有jshell_收藏了800道Java后端经典面试题,分享给大家,希望你找到自己理想的Offer呀~...
  8. Java反序列化漏洞通用利用分析
  9. sql server 面试_SQL Server复制面试问题与解答
  10. python多进程编程实例_[python] Python多进程编程技术实例分析
  11. python findall_Python 正则表达式:findall
  12. c++之find()函数
  13. matlab:绘制box函数和高斯函数曲线并进行傅里叶变换
  14. 计算机的维修有两种,两个汽车电脑维修案例 你未必会修
  15. 经典算法之直接插入排序法
  16. Android 4.0.4-在build.prop中添加属性
  17. win10如何设置pdf默认打开方式
  18. 动态代理 ---- 框架基础技术
  19. 导入的OSM地图如何快速设置道路信息
  20. Vue3 中还处在实验性阶段 Suspense 是个啥?

热门文章

  1. android+双卡imei,以编程方式在Android中为双SIM卡检索IMEI号码
  2. GFS —— 分布式文件系统
  3. 又是一年叶落时(二)
  4. Maven详解(第二节)
  5. 多品种+小批量生产计划方法
  6. 阿里云物联网平台之创建产品与设备
  7. httpwebrequest下载文件失败的解决方案
  8. huya弹幕提取小尝试
  9. 苹果中国应用商店改为人民币结算 可网银充值
  10. 开源:MIS金质打印通原理及实现 Step by step (1)