#12856: 還算好理解的C++解法 AC


sandaon (sandaon)

學校 : 國立中興大學
編號 : 55809
來源 : [114.24.78.88]
最後登入時間 :
2021-02-27 01:52:52
a016. 數獨(SUDOKU) | From: [220.134.63.144] | 發表日期 : 2017-10-22 19:40

#include <iostream>
using namespace std;

int whichOne(int i, int j) {
    if (i>=0 && i<=2 && j>=0 && j<=2) {
        return 7;
    }
    else if (i>=3 && i<=5 && j>=0 && j<=2) {
        return 4;
    }
    else if (i>=6 && i<=8 && j>=0 && j<=2) {
        return 1;
    }
    else if (i>=0 && i<=2 && j>=3 && j<=5) {
        return 8;
    }
    else if (i>=3 && i<=5 && j>=3 && j<=5) {
        return 5;
    }
    else if (i>=6 && i<=8 && j>=3 && j<=5) {
        return 2;
    }
    else if (i>=0 && i<=2 && j>=6 && j<=8) {
        return 9;
    }
    else if (i>=3 && i<=5 && j>=6 && j<=8) {
        return 6;
    }
    else if (i>=6 && i<=8 && j>=6 && j<=8) {
        return 3;
    }
}

int main(){
    int array[9][9];
    while (cin >> array[0][0]) {
        int nine9[9][9] = {0};
        int hende[9][9] = {0};
        int zhide[9][9] = {0};
        int position;
        int jump = 0;
        for (int i = 0; i < 9; i++) {
            for (int j = 0; j < 9; j++) {
                if (i == 0 && j == 0) {
                    position = whichOne(i, j);
                    hende[j][array[i][j]-1] = 1;
                    zhide[i][array[i][j]-1] = 1;
                    nine9[position-1][array[i][j]-1] = 1;
                    continue;
                }
                else {
                    cin >> array[i][j];
                    position = whichOne(i, j);
                    nine9[position-1][array[i][j]-1] = 1;
                    hende[j][array[i][j]-1] = 1;
                    zhide[i][array[i][j]-1] = 1;
                }
            }
        }
        for (int i = 0; i < 9; i++) {
            for (int j = 0; j < 9; j++) {
                if (hende[i][j] != 1 || zhide[i][j] != 1 || nine9[i][j] != 1 ){
                    jump = 1;
                    break;
                }
            }
            if (jump == 1) {
                break;
            }    
        }
        if (jump == 1) {
            cout << "no" << endl;
        }
        else {
            cout << "yes" << endl;
        }
    }
    return 0;
}

 
ZeroJudge Forum