1 solutions

  • 0
    @ 2025-11-5 17:13:43

    C++ :

    #include<cstdio>
        int a[101];
        int n;
    void print(int k)
    {
        for(int i=1;i<k;i++)
            printf("%d ",a[i]);
        printf("%d\n",a[k]);
    }
    void go(int s,int k)//s表示是否加完,即与0相差多少;k表示当前是第k个数
    {
        if(s==0)
        {
            print(k-1);//k的初始值为1,为了防止多输出一位,即用k-1
            return;
        }
        for(int i=1;i<=s;i++)
            if(a[k-1]<=i&&i<n)
            {
                a[k]=i;
                s=s-i;
                go(s,k+1);//核心算法-回溯
                s=s+a[k];
            }
    }
    int main()
    {
        scanf("%d",&n);
        go(n,1);
    }
    
    • 1

    Information

    ID
    18208
    Time
    1000ms
    Memory
    128MiB
    Difficulty
    (None)
    Tags
    # Submissions
    0
    Accepted
    0
    Uploaded By