C - Number Place
ナンプレが正しいかどうかの判定です。
縦、横、ブロックごとにsetに突っ込んで全ての長さが $9$ であるかを判定すればいいです。
s = [list(map(int, input().split())) for _ in range(9)] a = [set() for _ in range(9)] b = [set() for _ in range(9)] c = [set() for _ in range(9)] for i in range(9): for j in range(9): a[i].add(s[i][j]) b[j].add(s[i][j]) c[(i // 3) * 3 + (j // 3)].add(s[i][j]) ok = True for i in a: if len(i) < 9: ok = False for i in b: if len(i) < 9: ok = False for i in c: if len(i) < 9: ok = False print("Yes" if ok else "No")
#include <iostream> #include <vector> #include <set> using namespace std; int main() { vector<vector<int>> s(9, vector<int>(9)); for (int i = 0; i < 9; i++) { for (int j = 0; j < 9; j++) { cin >> s[i][j]; } } vector<set<int>> a(9), b(9), c(9); for (int i = 0; i < 9; i++) { for (int j = 0; j < 9; j++) { a[i].insert(s[i][j]); b[j].insert(s[i][j]); c[(i / 3) * 3 + (j / 3)].insert(s[i][j]); } } bool ok = true; for (set<int> &i: a) { if (i.size() < 9) { ok = false; } } for (set<int> &i: b) { if (i.size() < 9) { ok = false; } } for (set<int> &i: c) { if (i.size() < 9) { ok = false; } } cout << (ok ? "Yes" : "No"); }