3979 - 2010年中兴面试题

通过次数

0

提交次数

0

时间限制 : 1 秒 内存限制 : 128 MB

输入两个整数 n 和 m

从数列1,2,3.......n 中 随意取几个数,使其和等于 m 

要求将其中所有的可能组合列出来

(每个数后面输出一个空格)

题目输入

题目输出

输入/输出样例

输入格式

5 6

输出格式

2 4 
1 5 
1 2 3 

C++解答

#include <iostream>
using namespace std;
#define Max 100
int n,m;//n个数中选出若干数,总和为m
int v[Max];//标记n个数是否被选,1选,0不选
void f(int k,int sum)
{
	int i;
	if(k>n||sum<0) return;//剪枝
	if(sum==0)
	{
		for(i=0;i<k;i++)
			if(v[i]) cout<<i+1<<' ';
		cout<<endl;
		return;
	}	
	v[k]=0;//不选第k号
	f(k+1,sum);//递归
	v[k]=1;//选第k号
	f(k+1,sum-k-1);//递归
}
int main()
{
	cin>>n>>m;
	f(0,m);
    return 0;
}