题目
求组合C(n,m) 1<=n,m<=10
输入
n m
输出
所有组合,每行一个
思路
深搜或者那个叫啥模拟?吧。。。
代码
代码1:非递归
#include<cstdio>
#include<algorithm>
using namespace std;
int n,r,a[11],i,j;
int main(){
scanf("%d%d",&n,&r);
for(int k=1;k<=n;k++) a[k]=k;
while(1){
for(int k=1;k<=r;k++)
printf("%d",a[k]);
printf("\n");
if(r!=n){
i=r;
j=r;
}
else break;
while(i>0&&a[i]==n-(r-i)) i--;
if(i==0) break;
a[i]++;
for(int k=i+1;k<=r;k++) a[k]=a[k-1]+1;
}
return 0;
}
代码2:深搜
#include<cstdio>
using namespace std;
int n,m,ans=0,a[11];
void ss(int l,int k){
if(l==m+1){
for(int i=1;i<=m;i++)
printf("%d",a[i]);
printf("\n");
return;
}
for(int i=k;i<=n;i++)
{
a[l]=i;
ss(l+1,i+1);
}
}
int main(){
scanf("%d%d",&n,&m);
ss(1,1);
return 0;
}