内存限制:128 MB时间限制:10 S
评测方式:文本比较命题人:20151222169
提交:2解决:1
题目描述
数独的具体规则如下: 每一行都用到1,2,3,4,5,6,7,8,9,位置不限, 每一列都用到1,2,3,4,5,6,7,8,9,位置不限, 每3×3的格子(共九个这样的格子)都用到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。
如下就是一个正确的数独:
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
输入
输入 输入n个数独,你来验证它是否违反规则. 第一行为数独个数,第二行开始为第一个数独,之后为第二个,至第n个. 注意!每个数独之间有一个回车隔开!
输出
输出 若正确则输出”Right”若不正确则输出”Wrong” 输出一个换一行
样例输入 复制
- 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
样例输出 复制
- Right
- Wrong
- // 1307: 数独 [for ACMer]
- #include
- using namespace std;
-
- const int N=11;
- int in[N][N];
- bool used[N];
-
- bool is_ok( int a,int b )
- {
- memset( used,0,sizeof( used ) );
- int cnt=0;
- for( int i=a;i<=a+2;i++ )
- for( int j=b;j<=b+2;j++ )
- if( in[i][j]>=1 && in[i][j]<=9 && used[in[i][j]]==0 )
- {
- cnt++;
- used[in[i][j]]=1;
- }
- else return false;
- return ( cnt==9 );
- }
-
- int main()
- {
- int n,i,j,cnt;
- bool f;
-
- scanf("%d",&n );
- while( n-- )
- {
- f=0;
- for( i=1;i<=9;i++ )
- for( j=1;j<=9;j++ )
- scanf("%d",&in[i][j] );
- for( i=1;i<=9;i++ )
- {
- memset( used,0,sizeof( used ) );
- cnt=0;
- for( j=1;j<=9;j++ )
- if( in[i][j]>=1 && in[i][j]<=9 && used[in[i][j]]==0 )
- {
- cnt++;
- used[in[i][j]]=1;
- }
- else break;
- if( cnt!=9 ) { f=1; goto out; }
- }
- for( j=1;j<=9;j++ )
- {
- memset( used,0,sizeof( used ) );
- cnt=0;
- for( i=1;i<=9;i++ )
- if( in[i][j]>=1 && in[i][j]<=9 && used[in[i][j]]==0 )
- {
- cnt++;
- used[in[i][j]]=1;
- }
- else break;
- if( cnt!=9 ) { f=1; goto out; }
- }
- for( i=1;i<=9;i+=3 )
- for( j=1;j<=9;j+=3 )
- if( is_ok( i,j )==0 ) { f=1; goto out; }
- out:
- printf( f ? "Wrong\n" : "Right\n" );
- }
- return 0;
- }
- // sum==45 用和判断不准确