やるだけ。
// ?b // c void f(vector<string>& v, int i, int j) { if (i + 1 < v.size() && j + 1 < v[i].size()) ; else return ; if (v[i][j] == '?' && v[i][j + 1] != '?' && v[i + 1][j] != '?') { int b = v[i][j + 1] - '0'; int c = v[i + 1][j] - '0'; int a = (c - b + 10) % 10; v[i][j] = a + '0'; } return ; } // ab // ? void g(vector<string>& v, int i, int j) { if (i && j + 1 < v[i - 1].size()) ; else return ; if (v[i][j] == '?' && v[i - 1][j] != '?' && v[i - 1][j + 1] != '?') { int a = v[i - 1][j] - '0'; int b = v[i - 1][j + 1] - '0'; v[i][j] = (a + b) % 10 + '0'; } return ; } // a? // c void h(vector<string>& v, int i, int j) { if (i + 1 < v.size() && j) ; else return ; if (v[i][j] == '?' && v[i][j - 1] != '?' && v[i + 1][j - 1] != '?') { int a = v[i][j - 1] - '0'; int c = v[i + 1][j - 1] - '0'; int b = (c - a + 10) % 10; v[i][j] = b + '0'; } return ; } class RevealTriangle { public: vector <string> calcTriangle(vector <string> T) { for (int loop = T.size() * T.size(); loop--; ) { for (int i = 0; i < (int)T.size(); ++i) { for (int j = 0; j < (int)T[i].size(); ++j) { if (T[i][j] == '?') f(T, i, j); if (T[i][j] == '?') g(T, i, j); if (T[i][j] == '?') h(T, i, j); } } } return T; } };