关闭

自然数拆分

514人阅读 评论(0) 收藏 举报
分类:

Problem Description

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

Input

输入有多组数据,对于每组数据就一个数n。

Output

对于每组输入输出n的拆分方法。

Sample Input

4

Sample Output

1+1+1+1
1+1+2
1+3
2+2
/*
     解题报告:4 分成的这几种情况,每种情况都是前一个数要小于或等于后面的数。
               这就是进行递归的条件,当找到他们组成的和等于N时,就是所要找的
               一种情况。直接输出就OK了。
*/
//标程:
#include<stdio.h>
#include<string.h>
int n;
int dp[1000010];
void output(int x)
{
	for(int i=1;i<x-1;i++)
		printf("%d+",dp[i]);
	printf("%d\n",dp[x-1]);
}
void dfs(int sum,int num)
{
	int i;
	if(sum==0 && num>2)
	{
		output(num);
		return ;
	}
	for(i=1;i<=sum;i++)
	{
		if(i>=dp[num-1])
		{
			dp[num]=i;
			dfs(sum-i,num+1);
		}
	}
}
int main()
{
    //freopen("a.txt","r",stdin);
	while(scanf("%d",&n)!=EOF)
	{
		memset(dp,0,sizeof(dp));
		dfs(n,1);
	}
	return 0;
}
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:113431次
    • 积分:3691
    • 等级:
    • 排名:第8751名
    • 原创:271篇
    • 转载:3篇
    • 译文:0篇
    • 评论:11条
    最新评论