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

题目

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

输入格式

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

输出格式

在这里插入图片描述

输入样例

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

思路: 可以用搜索做,我自己做的时候没想出很好的搜索方式,然后上网查了一下,大佬的深搜写的真是太迷人了。直接每一位累加尝试,因为要求数字不大,所以不用害怕会爆。最后如果相等则输出数组中的结果即可。

#include 
#include 

using namespace std;

int a[31], sum = 0, top = -1, cnt = 0;

void dfs(int i, int n)
{
    if (sum == n)
    {
        cnt++;

        printf("%d=", n);

        for (int j = 0; j < top; ++j)
            printf("%d+", a[j]);
        if (cnt % 4 == 0 || a[top] == n)
            printf("%d\n", a[top]);
        else printf("%d;", a[top]);

        return;//important!!!!!!!!!
    }

    if (n < sum) return;//important!!!!!!!

    for (int j = i; j <= n; ++j)
    {
        a[++top] = j;
        sum += j;
        dfs(j, n);
        sum -= j;
        top--;
    }
}

int main()
{
    int n;

    scanf("%d", &n);

    dfs(1, n);

    return 0;
}

你可能感兴趣的:(搜索)