SCAU------18712 组合问题(完善中)

时间限制: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;
 } 

猜你喜欢

转载自blog.csdn.net/BitcoinR/article/details/106391671