版权声明:署名,允许他人基于本文进行创作,且必须基于与原先许可协议相同的许可协议分发本文 (Creative Commons)
数字的分解
Description
输入一个数字N,将它分成至少2个数字之和
并且保证输出方案为字典序,即第一个数字尽可能小,在第一个数字相同的情况下第二个数字尽可能小
例如n=6
1 5
2 4
3 3
1 1 4
1 2 3
2 2 2
1 1 1 3
1 1 2 2
1 1 1 1 2
1 1 1 1 1 1
Input
一个数字N
Output
若干行,每行一种方案,每行每个数字后面有一个空格
#include<bits/stdc++.h>
using namespace std;
int ans[100],n,lim;
void shuzidefenjie (int dep,int pre,int sum)
{
if (dep==lim+1)
{
if (sum==n)
{
for (int i=1;i<=dep-1;i++)
cout<<ans[i]<<" ";
cout<<endl;
}
return;
}
for (int i=pre;i<=n;i++)
if (sum+i<=n)
{
ans[dep]=i;
shuzidefenjie(dep+1,i,sum+i);
}
}
int main()
{
cin>>n;
for (lim=2;lim<=n;lim++)//这里是不可以在int一次的 (int lim;xx;xx)是错误的!!!!!!!!!!
shuzidefenjie(1,1,0);
return 0;
}