2615 - 自然数的拆分问题

通过次数

0

提交次数

0

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

任何一个大于1的自然数n,总可以拆分成若干个小于n的自然数之和。  

题目输入

 输入:待拆分的自然数n。 

题目输出

输出:若干数的加法式子。  

输入/输出样例

输入格式

7

输出格式

1+1+1+1+1+1+1  
1+1+1+1+1+2  
1+1+1+1+3  
1+1+1+2+2  
1+1+1+4  
1+1+2+3  
1+1+5  
1+2+2+2  
1+2+4  
1+3+3  
1+6  
2+2+3  
2+5  
3+4  

C++解答

#include<iostream>
#include<cstdio>
#include<cstdlib>

using namespace std;

int a[10001]={1},n,total;
int search(int,int);
int print(int);

int main()
{
	cin>>n;
	search(n,1);
	//cout<<"total="<<total<<endl;
} 
int search(int s,int t)
{
	int i;
	for(i=a[t-1];i<=s;++i)
	if(i<n)
	{
		a[t]=i;
		s-=i;
		if(s==0)print(t);
			else search(s,t+1);
		s+=i;
	}
}

int print(int t)
{
	//cout<<n<<"=";
	for(int i=1;i<=t-1;i++)
	cout<<a[i]<<"+";
	cout<<a[t]<<endl;
	total++;
}