1005. 数独

题目描述

数独游戏,具体规则如下:

每一行都用到1,2,3,4,5,6,7,8,9, 位置不限,

每一列都用到1,2,3,4,5,6,7,8,9, 位置不限,

每3*3的格子(共9个这样的格子)都用到1,2,3,4,5,6,7,8,9, 位置不限,

游戏过程就是用1,2,3,4,5,6,7,8,9填充空白,并满足每行,每列,每个九宫格都用到1,2,3,4,5,6,7,8,9,

如下是个正确的sudoku:

数独

输入格式

输入n个数独,你来验证它是否违反规则。

第一行为数独个数,第二行开始为第一个数独,之后第二个,至第n个。

注意:每个数独间有个回车隔开。

输出格式

若正确则输出"Right",否则输出"Wrong", 输出一个换一行。

说明

1<=n<=20(输入的数独个数)

不论输入的数独是否正确,数据保证每个数都在1-9间。

Sample Input

2
5 8 1 4 9 3 7 6 2
9 6 3 7 1 2 5 8 4
2 7 4 8 6 5 9 3 1
1 2 9 5 4 6 3 7 8
4 3 6 1 8 7 2 9 5
7 5 8 3 2 9 1 4 6
8 9 2 6 7 1 4 5 3
6 1 5 9 3 4 8 2 7
3 4 7 2 5 8 6 1 9

1 2 3 4 5 6 7 8 9
2 3 4 5 6 7 8 9 1
3 4 5 6 7 8 9 1 2
4 5 6 7 8 9 1 2 3
5 6 7 8 9 1 2 3 4
6 7 8 9 1 2 3 4 5
7 8 9 1 2 3 4 5 6
8 9 1 2 3 4 5 6 7
9 1 2 3 4 5 6 7 8

Sample Output

Right
Wrong


#include<iostream>
using namespace std;

int main(){
    int a,n;
    int b[27][10];
    //freopen("input.txt","r",stdin);
    cin>>n;
    while(n-->0){
        for(int i=0;i<27;i++){
            for(int j=0;j<10;j++){
                b[i][j]=0;
            }
        }
        for(int i=0;i<9;i++){
            for(int j=0;j<9;j++){
                cin>>a;
                b[i][a]++;
                b[9+j][a]++;
                if(i<3){
                    if(j<3){
                        b[18][a]++;
                    }else{
                        if(j<=5){
                            b[19][a]++;
                        }
                        else{
                            b[20][a]++;
                        }
                    }
                }
                else{
                    if(i<=5){
                        if(j<3){
                            b[21][a]++;
                        }else{
                            if(j<=5){
                                b[22][a]++;
                            }
                            else{
                                b[23][a]++;
                            }
                        }                        
                           }
                           else {
                            if(j<3){
                                b[24][a]++;
                            }else{
                                if(j<=5){
                                    b[25][a]++;
                                }
                                else{
                                    b[26][a]++;
                                }
                            }                               
                           }
                }
            }
        }
        bool flag=true;
        for(int i=0;i<27;i++){
            for(int j=1;j<10;j++){
                if(b[i][j]!=1){
                    flag=false;
                    break;
                }
            }
        }
        /*
        for(int i=0;i<27;i++){
            for(int j=0;j<10;j++){
                cout<<b[i][j]<<" ";
            }
            cout<<endl;
        }
        */
        if(flag){
            cout<<"Right"<<endl;
        }else{
            cout<<"Wrong"<<endl;
        }
    }
    return 0;
}
原文地址:https://www.cnblogs.com/bernieloveslife/p/7778344.html