zoukankan      html  css  js  c++  java
  • CCF NOI1077(自然数的拆分问题 )

    题目描述

    任何一个大于1的自然数n,总可以拆分成若干个小于n的自然数之和。拆分成的数字相同但顺序不同被看做是相同的方案,如果1+3与3+1被看做是同一种方案。

    输入

    输入待拆分的自然数n。

    输出

    如样例输出若干个拆分方案(具体见样例)。

    样例输入

    7

    样例输出

    1+1+1+1+1+1+1
    1+1+1+1+1+2
    1+1+1+1+3
    1+1+1+2+2
    1+1+1+4
    1+1+2+3
    1+1+5
    1+2+2+2
    1+2+4
    1+3+3
    1+6
    2+2+3
    2+5
    3+4

    数据范围限制

    1<=n<=20

    分析:递归做。

    #include<cstdio>
    int a[30],N;
    void f(int j,int res,int k)
    {
        if(res==0) 
        {
            for(int i=0;i<k-1;i++)
                printf("%d+",a[i]);
            printf("%d
    ",a[k-1]);
        }
        for(int i=j;i<=res;i++)
        {a[k]=i;f(i,res-i,k+1);} 
    }
    
    int main()
    {
        scanf("%d",&N);
        for(int i=1;i<=N/2;i++)
        {
            a[0]=i;f(i,N-i,1);
        }
        return 0;
    }
    View Code
  • 相关阅读:
    排序与查找
    gdb
    编码风格
    数组
    结构体
    循环语句
    深入理解函数
    分支语句
    简单函数
    解决国内NPM安装依赖速度慢问题
  • 原文地址:https://www.cnblogs.com/ACRykl/p/8334421.html
Copyright © 2011-2022 走看看