满意答案
rxieS
2016.08.07
采纳率:51% 等级:12
已帮助:4857人
#include
#define MAX 10
int res[MAX] ;//res存储每次选择的6个数
int N, M ;//N是10,M是6
int count = 0 ;
void print(int res[], int n)//将6个数字写入文件
{
double t = (res[0]+res[1])%10 ;
if(t != 1 && t != 6)//如果第一个数字和第二个数字之和不是10就不打印
return ;
for(int i = 0; i < n-1; i++)//先打印前5个
{
printf("%02d,", res[i]) ;
}
printf("%02d\n", res[n-1]) ;//再打印最后一个
}
void com(int last, int layer) //last是当前res中存储的最后一个数,layer是递归的层数
{
if(layer == 6)//递归到6层的时候打印说明已经选出6个数
{
count++;
print(res, M) ;//调用print显示6个组合数
return ;
}
for(int j = last+1; j <= N-M+layer+1; j++)//如果还没选够6个数,继续选择
{
res[layer] = j ;
com(j, layer+1) ;
}
}
int main()
{
N = 10;
M = 6 ;
com(0, 0) ;//开始res一个数都没选,递归层数为0
return 0 ;
}
00分享举报