题目描述:
从自然数1,2,3,,,,M中任取N个数的所有组合,其中M>=N>=1
//M>=N>=1
//输出1~M中所有N个数的组合
#include <iostream>
using namespace std;
#define MAX 100
int Array[MAX];
void Combine(int m,int n)
{
int i,j;
for (i=m;i>=n;--i)//最高位的所有可能是从m到n
{
Array[n] = i;
if (n>1)
{
Combine(i-1,n-1);//从剩下的i-1个数中取n-1个数
}
else//当n==1时输出这个组合中的所有数
{
for (j=Array[0];j>0;--j)//Array[0]中存放了要取组合数的个数
{ //用Array[0]来保存组合数的个数,总感觉很奇怪,不知道有没有其它方法?
cout<<Array[j]<<" ";
}
cout<<endl;
}
}
}
void main()
{
int M,N;
cin>>M>>N;
if (M<N)
{
cout<<"Error: M<N"<<endl;
}
else
{
Array[0] = N;
Combine(M,N);
}
system("pause");
return ;
}