输出N个数中取M个数的所有组合,排列情况
来源:互联网 发布:am域名投资 编辑:程序博客网 时间:2024/05/29 10:55
一般思路是由组合算排列,现在借助Next_permutation函数由排列到组合。
1.组合
读入一个字符串,一个整数n,输出字符串中取n个字符的所有组合情况
算法:借助Next_permutation函数,构造一个大小为len=str.length()的数组,0表示要输出的数,1表示不要输出的数。
代码如下:
#include <iostream>#include <string>#include <algorithm>#include <memory.h>using namespace std;int main(){string str;int n;cin>>str>>n;int len=str.length();int a[100];memset(a,1,sizeof(a));for(int i=0;i<n;i++)a[i]=0;do{for(int i=0;i<len;i++){if(a[i]==0)cout<<str[i];}cout<<endl;}while(next_permutation(a,a+len));system("pause");return 0;}
2.排列
#include <iostream>#include <string>#include <algorithm>#include <memory.h>using namespace std;int main(){string str;int n;cin>>str>>n;int len=str.length();int a[100];char b[100];memset(a,1,sizeof(a));for(int i=0;i<n;i++)a[i]=0;do{int j=0;for(int i=0;i<len;i++){if(a[i]==0){b[j]=str[i];j++;}}do{for(int i=0;i<j;i++)cout<<b[i];cout<<endl;}while(next_permutation(b,b+j));cout<<endl;}while(next_permutation(a,a+len));system("pause");return 0;}
排列回溯:
#include <iostream> using namespace std; const int n=4;//总的元素数 const int m=3;//需要排列的元素个数 int num[m];//记录状态的数组,保存各个位置的排列元素 bool is_valid(int count) //判断第count次取数是否合理 { for(int i=0;i<count;++i) { if(num[i]==num[count]) { return false; } } return true; } void choose_num(int count) //第count次选数 { if(count==m)//选取的排列元素够了 { for(int i=0; i<m; ++i) { cout<<num[i]; } cout<<endl; return; } for(int i=1;i<=n;++i)//如果没选够,选择一个数,合理后递归调用 { num[count]=i; if(is_valid(count)) { choose_num(count+1); } } } int main() { choose_num(0); }
- 输出N个数中取M个数的所有组合,排列情况
- 从1到N这N个数中取M个数,将这M个数从大到小输出,将所有的组合顺序输出
- 从n个数中选取m个数的所有组合
- 输出从n个数中选m个数的所有组合
- m个数中取n个数的组合
- 所有组合, 所有排列的模板(从n个数中选m个数的所有组合和所有排列)
- m个数中取n个的组合
- 递归实现 从n个数中选取m个数的所有组合
- N个数取m个数的全排列非递归
- OC----从N个数中选取M个数的组合
- 计算从1到N的自然数中取M个数的所有组合的lua函数
- [sprc_lcl(cool一生) ]先生的一段代码:从n个数字中取m个数的所有组合
- 从M个数中随机选出N个数的所有组合,无序,(一)
- 从M个数中随机选出N个数的所有组合,有序,(二)
- 深搜 从n个数中随机选取m个数 求出所有组合的和 模版
- 编写算法输出从n个数中取k个(k小于等于n)的所有组合
- 从M个数中选出N个的所有组合情况算法
- 从m个数中任意去n个数的组合
- The Property Browser Framework
- zz : memcached源码学习-内存管理机制slab allocator
- vs2005连接Oracle远程数据库
- 火车票电话预订流程
- 足协做让步仍难寻女足助教 李铁专心俱乐部弃执教
- 输出N个数中取M个数的所有组合,排列情况
- 优秀的个人空间
- 浅析boost之智能指针—shared_ptr
- 《参考消息》评出2011年十大涉华新闻
- 在windows上使用symfony创建简易的CMS系统(一)
- memcached 安装使用
- 试题:输入n, 得到以n为边长的正方形网格, 奇数圈为A, 偶数圈为B
- 如何编写单元测试用例(白盒测试)
- BST