示例一彩票的组合问题(7位)(不定时补充)(题目来源于《零基础学算法》)
解题思路:
在彩票的位数上,我们考虑从最低位开始进行排数,当最后一位拍完数值后,向前进一位,进行同样的操作,
如下图片所示:
在图片中,我们可以发现,首先变化最后一位,当最后一位数位1的时候,位数向前进一位,通过这样的递归的调用,就可以生成组合了。(代码中有解释)
代码附带
#include<stdio.h>
#define MAXN 7//彩票的位数
#define NUM 10//设置组成彩票的数字
int num[NUM];
int lottery[MAXN];
int main()
{
int i,j;
for(i = 0;i < NUM;i++)
{
num[i] = i+1;//赋值彩票的数字大小
}
for(i = 0;i < MAXN;i++)
{
lottery[i] = 0;//将组合清空,初始化为零
}
combine(NUM,MAXN);//函数的调用
return 0;
}
void combine(int n,int m)
{
int i, j;
for(i = n;i >= m;i--)
{
lottery[m-1] = num[i-1];//保存一位数字
if(m>1)
{
combine(i-1,m-1);
}
else//m==1即向前移动一位 与输出一组号码
{
for(j = MAXN-1;j >= 0;j--)//打印每一组组合
{
printf("%2d",lottery[j]);
}
getchar();//回车运行 。每按一次出来一组数据
printf("\n");
}
}
}