组合数
来源:互联网 发布:linux流量统计分析 编辑:程序博客网 时间:2024/05/21 20:28
意思:从m个不同元素中取出n(n≤m)个元素的所有组合,叫做从m个不同元素中取出n个元素的组合数。
例子:6个取3个
654 653 652 651 643 642 641 632 631 621
543 542 541 532 531 521
432 431 421
321
程序原理:设两个数组a[m],b[m],a[m]中保存m个数值,b[m]全部初始化为0(代表未选择),在b[m]中设n个值为1(代表选择),每一次改变b数组值记录一下b数组,保存到c[C][m]二维数组中,最后将c二维数组中的值参照a数组转换即可。(C为组合,详见:排列组合)
数组样例:
111000
110100
101100
011100
110010
101010
011010
100110
010110
001110
110001
...
000111
规律:第三位1先向后移一位,第二个1移一位,第一个1跟着,三位1相邻,前两位1回到最前方,第三位1向后移一位,第一二1位相邻,第一位1回到最前方,第二位1向后移一位,以此类推,直到000111为止。
核心代码:
int a[6],b[6];int c[20][6];int q=0;//c[q][],增加c数组用for(int i=0;i<m;i++){a[i]=i+1;b[i]=0;}//a[i]保存m个数值123456,b[i]初始化为0 for(int i=0;i<n;i++){b[i]=1;}//在b[m]中设n个值为1,其他为0bool judge=false;//do循环用do{int w=0;//c[][w],增加c数组用//参照打印for(int i=0;i<m;i++){if(b[i]==1){c[q][w]=a[i];w++;}}//q++;judge=false;// 核心算法 for(int i=0;i<m-1;i++){if(b[i]==1 && b[i+1]==0){swap(b[i],b[i+1]);//调用封装交换函数judge=true;if(b[0]==0){for(int j=0,k=0;j<i;j++){if(b[j]){swap(b[k],b[j]);k++;}}}break;}}//}while(judge);
阅读全文
0 0
- 组合数
- 组合数
- 组合数
- 组合数
- 组合数
- 组合数
- 组合数
- 组合数
- 组合数
- 组合数
- 组合数
- 组合数
- 组合数
- 组合数
- 组合数
- 组合数
- 组合数
- 组合数
- 安卓界面——最开始界面的加载
- 题目891:找点
- HDU2222:Keywords Search
- 微信小程序点击图片实现长按预览、保存、识别带参数二维码、转发等功能
- Ajax
- 组合数
- insufficient permission for adding an object to repository database
- css复习——overflow
- Python编写csdn刷博客数量软件
- python 分析监控日志
- Mac安装mysqldb
- Here document
- AngularJS实现增删改查带路由的
- Angularjs框架集成pagination