c++ 分解数2

Posted lja001162

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c++ 分解数2相关的知识,希望对你有一定的参考价值。

题目描述

输入自然数n,然后将其分拆成由若干数相加的形式,参与加法运算的数可以重复
例如将一个正整数N分解成几个正整数相加,可以有多种分解方法,例如7=1+6,7=2+5,7=1+1+5,…。编程求出正整数N的所有整数分解式子。

输入

输入
待拆分的自然数n ( 1 < n < = 50 )

输出

若干数的加法式子(注意观察输出的顺序)。

样例输入

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

Source Code

#include <stdio.h>
#define MAX 10 //最多能拆分10个数
int a[MAX];
int n,top=-1,sum=0;
void dfs(int i)

    if(sum==n)//如果分解的数加起来等于n (n:要分解的数)
    
        printf("%d=",n);
        for(int j=0;j<top;j++)//输出这些分解的数
            printf("%d+",a[j]);
        printf("%d\n",a[top]);//单独输出因为最后一个数后面没有加号,并且需要回车
        return;
    
    if(sum>n)//如果分解出来的数大于n
        return;//返回
    for(int k=i;k<=n;k++)
    
        top=top+1;//移动当前要分解数的位置(栈里面的位置)
        a[top]=k;//给当前位置赋值
        sum=sum+k;//sum就是分解出来数加起来的和,把现在这个拆出来的数累加进去
        dfs(k);//当前位置选k
        sum=sum-k;//当前位置判断结束后,再判断上一个数,所以将当前位置的值从sum中移除
        top--;//当前位置的数被循环赋值并判断后再选择上一个数
    

int main()

    scanf("%d",&n);//n是要分解的数
    dfs(1);//当前位置选1
    return 0;

技术图片

以上是关于c++ 分解数2的主要内容,如果未能解决你的问题,请参考以下文章

数分解问题:把一个数分解成很多数

萌新笔记——C++里将string类字符串(utf-8编码)分解成单个字(可中英混输)

数论——质因数分解(C++)

因数分解

AcWing 871. 约数之和(唯一分解定理+组合数)

c语言一个数分解成独立的数字