1 条题解

  • 0
    @ 2025-2-14 21:22:42

    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

    信息

    ID
    878
    时间
    1000ms
    内存
    128MiB
    难度
    (无)
    标签
    递交数
    0
    已通过
    0
    上传者