zoukankan      html  css  js  c++  java
  • 7-37 整数分解为若干项之和(20 分)

    7-37 整数分解为若干项之和(20 分)

    将一个正整数N分解成几个正整数相加,可以有多种分解方法,例如7=6+1,7=5+2,7=5+1+1,…。编程求出正整数N的所有整数分解式子。

    输入格式:

    每个输入包含一个测试用例,即正整数N (0<N≤30)。

    输出格式:

    按递增顺序输出N的所有整数分解式子。递增顺序是指:对于两个分解序列N1​​={n1​​,n2​​,⋯}和N2​​={m1​​,m2​​,⋯},若存在i使得n1​​=m1​​,,ni​​=mi​​,但是ni+1​​<mi+1​​,则N1​​序列必定在N2​​序列之前输出。每个式子由小到大相加,式子间用分号隔开,且每输出4个式子后换行。

    输入样例:

    7
    

    输出样例:

    7=1+1+1+1+1+1+1;7=1+1+1+1+1+2;7=1+1+1+1+3;7=1+1+1+2+2
    7=1+1+1+4;7=1+1+2+3;7=1+1+5;7=1+2+2+2
    7=1+2+4;7=1+3+3;7=1+6;7=2+2+3
    7=2+5;7=3+4;7=7

    思路:如果DFS解决不了的话,说明你的还不够DFS

    #include<stdio.h>
    #include<math.h>
    #include<iostream>
    using namespace std;
    int flag = 0, n, a[35];
    void dfs(int len, int pos, int next)    //len当前长度,pos当前用了多大值,下一个要加的值的大小
    {
        if (pos + next > n)return;                    //如果值大于N就没有继续的必要了
    
        a[len++] = next;                //保存路径
        
        if (pos+next == n){
    
            cout << n << "=";
            for (int i = 0; i < len; i++){
                if (i == 0)    cout << a[i];
                else cout << "+" << a[i];
            }
            
            
            if (++flag % 4 == 0||next == n)cout << endl;        //每输出四个一次回车
            else cout << ";";                                                    //每行输出最后一个不带分号
        }
    
        if (pos + next < n)
        {
            pos += next;
            for (int i = next; i <= n - pos; i++)//根据规律得出后面的i>=next
                dfs(len, pos, i);
        }
        
    }
    int main()
    {
        
        cin >> n;
        for (int i = 1; i <= n / 2; i++)        //i小于n/2,防止7=3+4、7=4+3该类情况
            dfs(0, 0, i);
        dfs(0, 0, n);                    //7=7的时候特殊处理    
    
        return 0;
    }
     
  • 相关阅读:
    PAT Basic 1077 互评成绩计算 (20 分)
    PAT Basic 1055 集体照 (25 分)
    PAT Basic 1059 C语言竞赛 (20 分)
    PAT Basic 1072 开学寄语 (20 分)
    PAT Basic 1049 数列的片段和 (20 分)
    蓝桥杯BASIC-13 数列排序
    蓝桥杯入门——3.序列求和
    蓝桥杯入门——2.圆的面积
    蓝桥杯入门——1.Fibonacci数列
    树的总结(遍历,BST,AVL原型,堆,练习题)
  • 原文地址:https://www.cnblogs.com/zengguoqiang/p/9124512.html
Copyright © 2011-2022 走看看