将一个正整数N分解成几个正整数相加,可以有多种分解方法,例如7=6+1,7=5+2,7=5+1+1,…。编程求出正整数N的所有整数分解式子。
输入样例:
7
输出样例:
7=1+1+1+1+1+1+1;7=1+1+1+1+1+2;7=1+1+1+1+3;7=1+1+1+2+2
7=1+1+1+4;7=1+1+2+3;7=1+1+5;7=1+2+2+2
7=1+2+4;7=1+3+3;7=1+6;7=2+2+3
7=2+5;7=3+4;7=7
#include<stdio.h>
#define MAXN 30
int Terms[MAXN];
int count;//count表示输出结果数
int N;//被分解的整数
void Search(int remain,int start,int num)
//remain剩余分解数,start表示分解起点数,分解得每一项应该大于等于start
//num用来记录已经分解得项数
{
int i;
if(0remain)
{
count++;
if(count%4!=1)
printf(";");
printf("%d=%d",N,Terms[0]);
for(i=1;i<num;i++)
printf("+%d",Terms[i]);
if(count%40)
printf("\n");
}
else
{
for(i=start;i<=remain;i++)
{
Terms[num]=i;
Search(remain-i,i,num+1);
}
}
}
int main()
{
scanf("%d",&N);
count=0;
Search(N,1,0);
if(count%4!=0)
printf("\n");
return 0;
}