周测题之DFS

在这里插入图片描述
将dfs层次分为三层
进行深搜

#include <bits/stdc++.h>
#define ll long long
using namespace std;
char s[100];
ll n;
int len, ans;
void dfs(ll sum, ll num, int pos, int op){
    
    
    if (pos == len){
    
    
        if (n == sum + num * op) ans++;
        return;
    }
    dfs(sum, num * 10 + s[pos] - '0', pos + 1, op); //无符号
    dfs(sum + num * op, s[pos] - '0', pos + 1, 1);  //加号
    dfs(sum + num * op, s[pos] - '0', pos + 1, -1); //减号
}

int main(){
    
    
    while (cin >> s >> n){
    
    
        ans = 0;
        len = strlen(s);
        dfs(0, s[0] - '0', 1, 1);
        cout << ans << endl;
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/wuyvle/article/details/113759872