给定一个数字m和数字n,输出相应的所有排列
来源:互联网 发布:种族主义 知乎 编辑:程序博客网 时间:2024/05/21 22:51
给定一个数字m和数字n,从n个数(即1,2,3,4,。...n)中选m个数总共有C(n,m)种序列。输出对于n,m的所有这种排列
当n=5,m=3,即C(5,3)输出10种序列
5 4 3
5 4 2
5 4 1
5 3 2
5 3 1
5 2 1
4 3 2
4 3 1
4 2 1
3 2 1
分析:可以从第一个数开始选择,因为(3,4,5)与(5,4,3)是算作一种序列的,所以呢为了避免重复,我们可以从大到小输出
该排列中的数大小依次递减,第一个数最大,最后一个数最小
第一个数字可以选择m到n的(n-m+1)个数,然后采用递归的方式即可,终止条件为m=0时
#include<iostream>#include<string>using namespace std;//size is equal to m when function is first time//invocatedvoid combination(int m,int n,int *A,int size){if(m==0){for(int i=size-1;i>=0;i--)cout<<A[i]<<" ";cout<<endl;return;}for(int i=n;i>=m;i--){A[m-1]=i;combination(m-1,i-1,A,size);}}int main(){int *A=new int[100];combination(3,6,A,3);}
刚开始很废的写了一个字符串的算法
#include<iostream>#include<string>using namespace std;//int *a=new int[m];void combination(int m,int n,string str){if(m==0){cout<<str;cout<<endl;return;}for(int i=n;i>=m;i--){//cout<<i<<" ";char buf[10];sprintf(buf, "%d",i);string b=buf;if(i<n){str=str.substr(0,str.size()-1);}str+=b;combination(m-1,i-1,str);}}int main(){combination(3,6," ");}
- 给定一个数字m和数字n,输出相应的所有排列
- 给定2个数字,n,m,使得从1到n之间的数字组合,他们的和等于m,求所有组合
- 任意给定一个自然数N,要求M是N的倍数,且他的所有各位数字都是由0或1组成,并要求M尽可能小
- 给定不同数字的集合,返回所有可能的排列。
- 给定一个填充非负数的m×n网格,找到一条从左上到右下的路径,这个路径将所有数字的总和最小化。
- 输入n,m,从1-n个数字里输出和为m的组合
- POJ-1150(求排列数P(n,m)中最后一个非0的数字)
- POJ-1150(求排列数P(n,m)中最后一个非0的数字)
- 求排列数P(n,m)中最后一个非0的数字
- 给定一个数组,按序排列,从数组找出若干个数,使得这若干个数字的和与M最为接近,(背包问题)
- 给定一个数字n, 等概率输出1-n的值,要求最后全都输出一遍
- 给定一个字符串,输出其所有的可能排列
- 【动态规划】扔 n 个骰子,向上面的数字之和为 S。给定 Given n,请列出所有可能的 S 值及其相应的概率。
- n全排列输出和 n个数的组合(数字范围a~b)
- 给定一个数字序列,输出一个最长的子序列
- 输出一个整数的所有数字
- 给定一个数组和一个数字,给定的数组里是否存在两个数字之和等于给定的数字
- 一个能将给定非负整数数组中的数字排列成最大数字的函数
- Android系统移植
- c# datagridview 添加行
- 数组与链表的优缺点
- Java Thread join() 的用法
- magento -- 推荐插件 -- 智能版Js和Css合并 --Lesti::Merge(Smart Merging of Js and Css)
- 给定一个数字m和数字n,输出相应的所有排列
- HDU - 1224 Free DIY Tour DP
- 一个非常简单的LRU Cache类
- (1)C++函数探幽——大型代码的优秀架构方式
- Android中屏幕相关的操作
- socket 由浅入深 系列------select Epoll poll 比较(六)
- 一些机器学习(Machine Learning)的网站总结
- c++中由于delete造成的悬垂指针
- mongodb学习(三)