C++ 可以用 set
去解,將不能出現重複數字的區塊,設為一個 set,如此會有橫向、縱向、九宮格各 9 個 set。
將讀入的數字放進對應的 set 中,最後只要確認每個 set 是不是都剛好有 9 個數字即可。
部份提示:
// 宣告
set<int> set_row[9], set_col[9], set_block[3][3];
// 將數字放進去
void push_in_set(int i, int j, int num) {
set_row[i].insert(num);
set_col[j].insert(num);
set_block[i / 3][j / 3].insert(num);
}
C++ 可以用 set
去解,將不能出現重複數字的區塊,設為一個 set,如此會有橫向、縱向、九宮格各 9 個 set。
將讀入的數字放進對應的 set 中,最後只要確認每個 set 是不是都剛好有 9 個數字即可。
部份提示:
// 宣告
set set_row[9], set_col[9], set_block[3][3];
// 將數字放進去
void push_in_set(int i, int j, int num) {
set_row[i].insert(num);
set_col[j].insert(num);
set_block[i / 3][j / 3].insert(num);
}
我是這樣寫的 哪裡有錯,能幫我看一下嗎
#include <iostream> #include <set> using namespace std; int main() { int num[9][9],T=2; set<int> set_row[9], set_col[9], set_block[3][3]; do{ for(int i=0;i<9;i++) for(int j=0;j<9;j++) { cin >> num[i][j]; set_row[i].insert(num[i][j]); set_col[j].insert(num[i][j]); set_block[i/3][j/3].insert(num[i][j]); } bool result=1; for(int i=0;i<9;i++) for(int j=0;j<9;j++) { if(set_row[i].size()!=9 || set_col[j].size()!=9 || set_block[i/3][j/3].size()!=9) { result =0; break; } } if(result) cout << "yes" <<endl; else cout << "no" <<endl; } while(cin.get()=='\n'); return 0; }