题解-数字的分解

知识共享许可协议 版权声明:署名,允许他人基于本文进行创作,且必须基于与原先许可协议相同的许可协议分发本文 (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;
}

猜你喜欢

转载自blog.csdn.net/Tangwan_jeff/article/details/95201045