【題目敘述】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";
}
}