这条题目想了半天,怎么在排列里面得出组合的结果,后来发现从最高为到最低位降序排列的排列就是组合,打一个边防345,354,435,453,543,534,这三个数会有6种排列,但是如果按照从最高位到最低为降序输出,只有543,符合要求,同样升序输出,只有345符合要求!数学还是不好啊!
这个和排列那一条很像,具体解释看以前的博客吧~
#include<iostream>
#include<math.h>
#include<memory.h>
using namespace std;
int n,r;
int visit[10],a[10];
int Time[10];
int NUM;
void Recusive(int c)
{
if(r==c)
{ int result=0;
for(int i=0;i<r;i++)
{
result+=a[i]*pow(10,r-i-1);
}
cout<<result<<endl;
}
else
{
for(int i=n;i>0;i--)
{
if(visit[i]<1)
{
if(c>0&&i>=a[c-1])
continue;
a[c]=i;
++visit[i];
Recusive(c+1);
--visit[i];
}
}
}
}
int main()
{
cin>>n>>r;
memset(visit,0,sizeof(visit));
Recusive(0);
}