递归组合算法
算法思想:对于一个长度为M的序列,要求N个数的组合。
1.从索引最小的元素遍历到第N-M个元素,将遍历到的元素定为组合中的第一个元素
2.判断组合中N个元素是否已满,如果满了,打印该组合,如果不满重,则截取1中选择的元素之后的序列,复步骤一。
#include<stdio.h>
#include<iostream>
using namespace std;
void getCombine(int* a,int* b,int m,int n,int index)
{
for(int i=0;i<=m-n;i++)
{
b[index]=a[i];
//cout<<index;
if(n>1)
getCombine(a+i+1,b,m-i-1,n-1,index+1);
else
{
for(int j=0;j<=index;j++)
{
cout<<b[j];
}
cout<<endl;
}
}
}
int main()
{
int max;
cin>>max;
int m,n;
int* a=new int(max);
int* b=new int(max);
cin>>n;
for(int i=1;i<=max;i++)
{
a[i-1]=i;
b[i-1]=0;
}
getCombine(a,b,max,n,0);
delete a;
delete b;
return 0;
}
分享到:
相关推荐
此代码实现从N个数字中取出M个数字的所有组合,有两种实现方法,递归方法和非递归方法。
组合的递归算法(递归求*组合*),很简洁。
排列组合是常见的数学问题,本文就以完整实例形式讲述了C#实现排列组合算法的方法。分享给大家供大家参考之用。具体方法如下: 首先,数学中排列组合,可表示为:排列P(N,R) 其实排列实现了,组合也就实现了,组合...
组合算法的重要性不言而喻,本文很巧妙地使用递归实现组合算法,呕心沥血之作,组合过程独创。
本资源附带文档解释了排列组合算法的实现和原理。其中排列算法是基于递归实现的,组合算法是基于高效的位移法实现的。代码是使用Java版实现的。
NULL 博文链接:https://largestone.iteye.com/blog/599295
递归优化算法: 某人手中有2000元钱,通过计算选择一种存钱方案,使得钱存入银行20年后得到的利息最多 (假定银行对超过存款期限的那一部分时间不付利息)。为了得到最多的利息,存入银行的钱 应在到期时马上取出来,...
C语言 回溯法(背包、跳马、组合算法 递归 C语言)
排列组合算法实现,支持模板类。支持重复数的排列。算法采用递归方法,简单易懂。
合并排序算法非递归形式源码 http://edsionte.com/techblog/archives/2898
2.5 组合生成算法 .2.6 应用举例 习 题 第三章 容斥原理 3.1 引 言 3.2 容斥原理 3.3 几个重要公式 3.4 错位排列 3.5 有限制的排列 3.6 棋阵多项式 3.7 禁位排列 习 题 第四章 鸽巢原理 4.1...
此段程序用了递归算法计算组合数在相应表中的序数。
本程序是排列组合算法的c语言表示,使用递归实现
基于递归模糊小波神经网络的INS-GNSS组合导航算法.pdf
摘要:C#源码,随书源码,递归算法,排列组合 C#递归算法:0~N位数的排列组合,组合的数字在0~5之间,输入需要组合的位数,点击“计算”按钮,程序会列出所有符合条件的数列组合。一个学习C#递归算法的好范例。
简单的组合算法,一个递归的应用示例,递归减少了很多代码
《信息学竞赛宝典--基础算法》,人民邮电出版社 c++基础算法视频讲解---第2...第02章 递归算法 第03章 枚举算法 第04章 递推算法 第05章 分治算法 第06章 贪心算法 第07章 排序算法 第08章 高精度算法 第09章 搜索算法
数字排列组合是个经典的算法问题,它很通俗易懂,适合不懂业务的人...这种算法常用递归或迭代来实现,单当M=14时,中间结果数量已经过亿,再大的话很容易超过单台机器的处理能力,所以我用hadoop来实现多机分别处理。
全排列的非递归实现。输入1,2,3 得到 [1],[2],[3],[1,2],[1,3],[2,3],[1,2,3]六种组合
这段程序是为了验证google的一个面试题些的。... 大概意思如下: 有一组点,知道其坐标值。 有一只笔可以用来画出点。笔画出点的时间很快,可以忽略不计,但是笔移动比较耗时...(若画笔的初始位置不定,可以由算法来定)