递归算法求n个数字的全排列
首先我们把n个数字用数组存放,数字存放顺序任意
我们设一个递归函数为 void qpl(int a[ ],int k,int n)
(k的范围是0~n-1),其含义为,求a[0]到a[k]全排列,a[k+1]到a[n-1]不变的序列
那么void qpl(int a[],int k-1,int n)含义为求a[0]到a[k-1]全排列,a[k]到a[n-1]不变的序列
我们举一个例子:1 2 3 4 5
令k=2,那么我们只需求前三个数的全排列。k=1,我们只需求前两个数的全排列。
那么前三个数的全排列个数又等于在三个数中取出来两个数,把这两个数放在前两位,再对这两个数进行全排列的个数,此为递推关系。
假设前三个数输入1,2,3
那么我们先求1,2的全排列,再把1和3换位置,求3,2的全排列,再把2,3换位置,求1,3的全排列。
下面给出代码
void qpl(int a[],int k,int n)
{int i,temp;
if(k==0)
{for(i=0;i<n;i++)
printf("%d",a[i]);
printf("\n");
}
else
{for(i=0;i<=k;i++)
{temp=a[i]; //a[i]和a[k]交换下位置
a[i]=a[k];
a[k]=temp;
qbl(a,k-1,n); //求a[0]到a[k-1]的全排列
temp=a[i];
a[i]=a[k];
a[k]=temp; //交换回来,下一个数和a[k]交换,循环操作
}
}
}
递归算法求n个数字的全排列相关推荐
- C#求数组中元素的全排列
2019独角兽企业重金招聘Python工程师标准>>> 1.算法描述 全排列的第一项是该数组的升序排列,最后一项是该数组的降序排列.本文中用到的了一个函数FindNextArray: ...
- 减治求有重复元素的全排列
求n个元素的全排列的所有解可以用减治法:每次拎出一个数做前缀,对剩下的元素再求全排列,直至只剩一个元素.代码源自<算法分析与设计(王晓东)>,复杂度O(n!) 1 //输出k~m的所有全排 ...
- 编程笔试(解析及代码实现):求不重复数字之和给定一组整型数字,里面有且仅有两个数字值出现了一次,其他的数字都出现了两次。请写出程序求出这两个只出现了一次的数字之和
编程笔试(解析及代码实现):求不重复数字之和给定一组整型数字,里面有且仅有两个数字值出现了一次,其他的数字都出现了两次.请写出程序求出这两个只出现了一次的数字之和 目录 题目描述 代码实现 题目描述 ...
- C#深度优先做数字的全排列
问题描述 输入1~9之间的数字,就可以做这个数字以下所有数字的全排列. 算法思想 1******: 比如1-5之间数字的全排列,把1放在第一位上,然后后面的数字从小到大排列: 排列好之后开始倒序取两个 ...
- 求字符串里面数字之和
无意看到别人面试问了很简单的问题,求字符串里面数字之和,所以自己来实现下. 例子: 比如字符串:aaaa13sseui9ddu78ff4sss 里面的字符串数字是13.9.78.4 得到的和为104 ...
- 求两个数字的乘积,如果大于0,说明两个数字同号,如果小于0,说明两个数字异号,如果等于0,说明其中一个是0
学了java基础东西,就写了这个编程,求两个数字的乘积,如果大于0,说明两个数字同号,如果小于0,说明两个数字异号,如果等于0,说明其中一个是0 首先程序要求我们输入两个数字,我就用了Scanner来 ...
- 求4个数字组成的不重复三位数,Python简洁解法
求4个数字组成的不重复三位数,Python解法 题目要求: 求所有由5,6,7,8组成的数字不重复的三位数 不重复的三位数,即不能出现555,566这种 通过分析,可以使用画树的方法来确定要求的三位数 ...
- python按指定条件筛选_求Python筛选数字集合内满足指定条件的数据方法,python筛选,唯一匹配是指mdash...
求Python筛选数字集合内满足指定条件的数据方法,python筛选,唯一匹配是指&mdash 唯一匹配是指----任何找出来的一对数中,位于一个集合中的数只能和另一个集合中的唯一 一个数匹配 ...
- 以孩子兄弟链表为存储结构,请设计递归算法求树的高度
题目:以孩子兄弟链表为存储结构,请设计递归算法求树的高度 分析:如果只有根节点,那么高度为1,如果有左孩子,那么高度由左孩子的左子树和右子树决定,取其大者. 代码如下: typedef struct ...
最新文章
- 文件流下载到本地 - 待完成
- Response对象学习
- 6. Qt 信号与信号槽(3)-QMetaObject
- [Kafka与Spark集成系列三] Spark编程模型
- java正则过滤js_JS/Java正则表达式验证
- 凯利公式自动计算表_EXCEL——可自动计算的收支表,全函数计算,拿上就用!
- Python3.x中set()集合的使用方法
- yeoman、bower、grunt 开发收集
- 海量高维数据与纬度约减
- PSpice的安装与Pspice的应用——B-1
- 建筑能源管理系统主要有什么功能?
- 软件架构设计师-ER图-关系模型转换
- 步进电机的正反向旋转c语言编程,实现步进电机自动正反转程序怎么写
- java无损压缩图片
- svn提示Node remains in conflict的解决办法
- AI创作教程之如何使用简单的 Web API 和 GPU 支持在 Docker 中运行 Stable Diffusion,在 45 秒内启动用于 Stable Diffusion的 Web API
- 计算机终端机 大型游戏,云电脑让各种终端玩转大型游戏
- Kafka动态认证SASL/SCRAM验证
- 如何搭建一套在线网校系统?需要哪些功能?
- NIST数字测试套件使用说明