这是我画的图:
可以发现第一位数是n-->r;而第二位数是在第一位数的基础上:n-1-->r-1;
所以我用了回溯法:
#include<stdio.h>
#include<stdlib.h>
int a[10]={0,1,2,3,4,5,6,7,8,9};
int b[10]={0};
void comb(int,int,int);
int main()
{
intn,r;
scanf("%d%d",&n,&r);
comb(n,r,r);
return0;
}
void comb(int n,int r,int R)//引入第三个参数统计组合数位数
{
inti;
if(r==0)
{
for(i=R;i>=1;i--)
printf("%d",b[i]);
printf("\n");
return;
}
else
{
for(i=n;i>=r;i--)
{
b[r]=a[i];//这样逆序存储数值
comb(i-1,r-1,R);
b[r]=0;
}
}
}