题目:桐桐想找出n个自然数(1,2,3,…,n)中r个数的组合。例如,当n=5,r=3时,所有组合为:123 124 125 134 135 145 234 235 245 345,总共有10种组合。
思路:如果选到第m个数,就输出;
选数:因为序列递增,所以加一个p表示上一个选到的数是几,则for循环就从p+1开始选数。
//递归求组合数
void get(int q,int p)
{
if(q==m)
{
for(int i=0;i<m;i++)cout<<a[i];
cout<<" ";
ans++;
return;
}
for(int i=p;i<=n;i++)
{
if(!st[i])
{
st[i]=true;
a[q]=i;
p=i;
get(q+1,p);
st[i]=false;
}
}
}
就到这里,希望你喜欢。