【題解】ZeroJudge c144: 105北二2加法填空題

【題目敘述】https://zerojudge.tw/ShowProblem?problemid=c144

#include <iostream>
using namespace std;

int n, a[10][4], ans[10][4];
string s;

bool f(int x, int y){
    if (x == n && !ans[x][0]) return true;
    if (y == 3){
        int tmp = ans[x][0]+ans[x][1]+ans[x][2];
        ans[x+1][0] = tmp/10;
        if (a[x][y] == -1){
            ans[x][y] = tmp%10;
            return f(x+1, 1);
        }
        else if (tmp%10 != a[x][y]) return false;
        else return f(x+1, 1);
    }
    else{
        if (a[x][y] == -1){
            for (int i = 0; i < 10; i++){
                ans[x][y] = i;
                if (f(x, y+1)) return true;
            }
            return false;
        }
        else return f(x, y+1);
    }
}

int main() {
    for (int i = 1; i <= 3; i++){
        cin >> s;
        n = s.length();
        for (int j = 0; j < n; j++){
            if (s[j] == '?'){
                a[n-j-1][i] = -1;
            }
            else{
                a[n-j-1][i] = s[j]-'0';
                ans[n-j-1][i] = s[j]-'0';
            }
        }
    }
    f(0, 1);
    for (int i = 1; i <= 3; i++){
        for (int j = n-1; j >= 0; j--){
            cout << ans[j][i];
        }
        cout << "\n";
    }
}
分享本文 Share with friends