时间限制:1000MS
代码长度限制:10KB
题型: 编程题 语言: 不限定
Description
找出从自然数1、2、……、m中任取k个数的所有组合,组合中字典序大的先输出。
例如m=5,k=3,应输出
5 4 3
5 4 2
5 4 1
5 3 2
5 3 1
5 2 1
4 3 2
4 2 1
3 2 1
输入格式
两个整数m和k,(1<=k<=m<=10)
输出格式
按字典序输出所有组合
输入样例
5 2
输出样例
5 4
5 3
5 2
5 1
4 3
4 2
4 1
3 2
3 1
2 1
分析:
由于只有当最后一个数确定后,当前组合才可以确定,故采用递归算法,将过程中每个值都存入指定数组。
代码参考:
#include<iostream>
using namespace std;
int a[100];
int n,m;
int com(int n1,int m1)
{
int i;
if(m1==0)
{
for(i=m;i>0;i--)//输出m个数
cout<<a[i]<<" ";
cout<<endl;
return 0;
}
for(i=n1;i>=m1;i--)//从n开始查找
{
a[m1]=i;
com(i-1,m1-1);
}
}
int main()
{
cin>>n>>m;
com(n,m);
return 0;
}