题目详情
给定自然数n,将其表示为若干自然数的和,输出所有的解。每组解从小到大排列。数字相同的不同排列算一组解。
输入格式:
一个自然数。
输出格式:
拆分式,每行一个。
输入样例:
4
输出样例:
4=1+1+1+1
4=1+1+2
4=1+3
4=2+2
4=4
- 下面代码
#include <iostream>
using namespace std;
void REsplit(int pos,int num, int sum,int n, int *p) //pos 表示position, num 表示number
{
if(sum==n){
cout<<n<<'='<<p[0];
for(int i=1;i<pos;i++)
cout<<'+'<<p[i];
putchar(10);
return ;
}
if(sum>n) return ;
for(int i=num;i<=n;i++)
{
p[pos]=i;
REsplit(pos+1,p[pos],sum+i,n,p);
}
}
int main()
{
int n;
cin>>n;
int *p = new int [n];
REsplit(0,1,0,n,p);
delete []p;
return 0;
}