整数分解成加数问题

问题:

3

2+1

1+1+1

解决:

采用递归的方式进行求解

#include <stdio.h>

void f(int n, int a[], int k)
{
    if(n<=0){
        for(int i=0; i<k; i++)
            printf("%d ", a[i]);
        printf("\n");
        return;
    }

    for (int i = n; i > 0; --i)
    {
        if(k>0 && i>a[k-1]) continue;
        a[k]=i;
        //printf("**a[%d] = %d\n", k, i);
        f(n-i, a, k+1);
    }
}

int main(int argc, char const *argv[])
{
    int a[100];
    f(3, a, 0);
    return 0;
}

3
2 1
1 1 1
请按任意键继续. . .

时间: 2024-10-13 04:02:10

整数分解成加数问题的相关文章

百度在线笔试编程测试题(Python):整数分解成素数的积

编程测试题: 输入一个正整数将其分解成素数的乘积,输入格式连续输入m个数,然后将这m个数分别分解,如 输入: 2 10 20 输出: 2 5 2 2 5 Python code: def primes(n): primfac = [] d = 2 while d*d <= n: while (n % d) == 0: primfac.append(d) n //= d d += 1 if n > 1: primfac.append(n) return primfac s = int(raw_i

爱根,明天就能见到你了!好!亢!奋!闲来无聊,将一个正整数分解成质因数!

1 #闲来无聊,将一个正整数分解成质因数,例如900=2*3*3*3*5*5. 2 3 #1.用while循环结合for循环做. 4 # while True: 5 # num=input("input a num:") #输入数字. 6 # if num: #如果输入了: 7 # num=int(num) #转化为字符串. 8 # List=[str(num),"="] #先将这个数字加到列表开头,创造输出格式. 9 # while num>=2: #当这个

数论快速入门(同余、扩展欧几里德、中国剩余定理、大素数测定和整数分解、素数三种筛法、欧拉函数以及各种模板)

数学渣渣愉快的玩了一把数论,来总结一下几种常用的算法入门,不过鶸也是刚刚入门, 所以也只是粗略的记录下原理,贴下模板,以及入门题目(感受下模板怎么用的) (PS:文中蓝色字体都可以点进去查看百度原文) 附赠数论入门训练专题:点我打开专题(题目顺序基本正常,用以配套数论入门) 一.同余定理 简单粗暴的说就是:若 a-b == m 那么 a%m == b%m 这个模运算性质一眼看出...直接上入门水题: Reduced ID Numbers 附AC代码(这个也没啥模板....知道就好) #inclu

整数分解

题目:给一个整数,将它分解成几个数的和,求使这几个数乘积最大的情况,,比如n=4 4=2+2 return 4;  n = 10, return 36 (10 = 3 + 3 + 4) 思路:6 = 2 + 2 + 2 = 3 + 3.但是 2 * 2 * 2 < 3 * 3.,由数学的知识(我也不知道怎么证明的.......)就是让它尽可能多分出来3 public int integerBreak(int n) { if(n==2) return 1; if(n==3) return 2; i

VJ 1033 整数分解(版本2)

描述 整数分解(版本2) 一个正整数可以分解成若干个自然数之和.请你编一个程序,对于给出的一个正整数n(1<=n<=1500),求出满足要求的分解方案,并使这些自然数的乘积m达到最大. 例如n=10,则可以分解为2+2+3+3,乘积m=2*2*3*3=36 格式 输入格式 一个正整数n 输出格式 输出分解的自然数的最大乘积m 样例1 样例输入1[复制] 10 样例输出1[复制] 36 提示 简单题,所有数据随机生成 题解 : n <= 3 时, 答案最大为n,即不拆. n > 3

整数分解为2的幂 数学

任何正整数都能分解成2的幂,给定整数N,求N的此类划分方法的数量!由于方案数量较大,输出Mod 1000000007的结果. 比如N = 7时,共有6种划分方法. 7=1+1+1+1+1+1+1   =1+1+1+1+1+2   =1+1+1+2+2   =1+2+2+2   =1+1+1+4   =1+2+4 Input输入一个数N(1 <= N <= 10^6)Output输出划分方法的数量Mod 1000000007Sample Input 7 Sample Output 6 找规律 #

POJ2429_GCD &amp;amp; LCM Inverse【Miller Rabin素数測试】【Pollar Rho整数分解】

GCD & LCM Inverse Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 9756Accepted: 1819 Description Given two positive integers a and b, we can easily calculate the greatest common divisor (GCD) and the least common multiple (LCM) of a and b.

阶乘的整数分解 fzu1753

题意:给T个组合数的最大公约数. 将每个组合数的素数分解式求出来,把每个素数的最小次数乘起来就是最大公约数.组合数可以写成阶乘的形式,然后利用阶乘的整数分解就可以得到组合数的整数分解. 代码: #include <cstdlib> #include <cctype> #include <cstring> #include <cstdio> #include <cmath> #include<climits> #include <

POJ2429_GCD &amp; LCM Inverse【Miller Rabin素数测试】【Pollar Rho整数分解】

GCD & LCM Inverse Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 9756Accepted: 1819 Description Given two positive integers a and b, we can easily calculate the greatest common divisor (GCD) and the least common multiple (LCM) of a and b.