1 solutions

  • 0
    @ 2024-11-15 14:46:21

    这一题考虑爆搜:我们dfs数字间的符号,找到n个符号就判断一次。如果可行就输出, 我们假设可以插入的 +, -, (空) 三种符合里的一种。

    #include <bits/stdc++.h>
    using namespace std;
    char sign[11];
    int n;
    void coutt() {
        cout << 1;
        for (int i = 1; i < n; ++i) cout << sign[i] << i + 1;
        cout << endl;
        return;
    }
    void dfs(int x, int sum, int i, int ssign) {
        if (x == n) {
            if (sum + i * ssign == 0)
                coutt();
            return;
        }
        sign[x] = ' ';
        dfs(x + 1, sum, i * 10 + x + 1, ssign);
        sign[x] = '+';
        dfs(x + 1, sum + i * ssign, x + 1, 1);
        sign[x] = '-';
        dfs(x + 1, sum + i * ssign, x + 1, -1);
    }
    int main() {
        cin >> n;
        dfs(1, 0, 1, 1);
        return 0;
    }
    
    • 1

    Information

    ID
    609
    Time
    1000ms
    Memory
    256MiB
    Difficulty
    8
    Tags
    (None)
    # Submissions
    27
    Accepted
    5
    Uploaded By