p1335 数独验证

描述
具体规则如下:
每一行都用到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” 输出一个换一行

样例1
样例输入1
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
样例输出1
Right
Wrong

思路
每行每列每块分开模拟。

代码

  1 #include <stdio.h>
  2 #include <stdlib.h>
  3 
  4 int main(){
  5     int i,n,a[10][10],j,k;
  6     scanf("%d",&n);
  7     for(k=1;k<=n;k++){
  8         int e=1;
  9         for(i=1;i<=9;i++){
 10             for(j=1;j<=9;j++){
 11                 scanf("%d",&a[i][j]);
 12             }
 13         }
 14         if(k!=n)
 15             getchar();
 16         for(i=1;i<=9;i++){
 17             int b[10]={0};
 18                 b[0]=1;
 19             for(j=1;j<=9;j++){
 20                 if(b[a[i][j]]==0)
 21                     b[a[i][j]]=1;
 22                 else{
 23                     printf("Wrong\n");
 24                     e=0;
 25                     break;
 26                 }
 27             }
 28             if(e==0)
 29                 break;
 30         }
 31         if(e==0)
 32             continue;
 33         for(j=1;j<=9;j++){
 34             int b[10]={0};
 35                 b[0]=1;
 36             for(i=1;i<=9;i++){
 37                 if(b[a[i][j]]==0)
 38                     b[a[i][j]]=1;
 39                 else{
 40                     printf("Wrong\n");
 41                     e=0;
 42                     break;
 43                 }
 44             }
 45             if(e==0)
 46                 break;
 47         }
 48         if(e==0)
 49             continue;
 50         for(i=2;i<=8;i=i+3){
 51             for(j=2;j<=8;j=j+3){
 52                 int b[10]={0};
 53                 b[0]=1;
 54                 if(b[a[i][j]]==0)
 55                     b[a[i][j]]=1;
 56                 else
 57                     e=0;
 58                 if(b[a[i-1][j-1]]==0)
 59                     b[a[i-1][j-1]]=1;
 60                 else
 61                     e=0;
 62                 if(b[a[i][j-1]]==0)
 63                     b[a[i][j-1]]=1;
 64                 else
 65                     e=0;
 66                 if(b[a[i-1][j]]==0)
 67                     b[a[i-1][j]]=1;
 68                 else
 69                     e=0;
 70                 if(b[a[i+1][j]]==0)
 71                     b[a[i+1][j]]=1;
 72                 else
 73                     e=0;
 74                 if(b[a[i][j+1]]==0)
 75                     b[a[i][j+1]]=1;
 76                 else
 77                     e=0;
 78                 if(b[a[i+1][j+1]]==0)
 79                     b[a[i+1][j+1]]=1;
 80                 else
 81                     e=0;
 82                 if(b[a[i-1][j+1]]==0)
 83                     b[a[i-1][j+1]]=1;
 84                 else
 85                     e=0;
 86                 if(b[a[i+1][j-1]]==0)
 87                     b[a[i+1][j-1]]=1;
 88                 else
 89                     e=0;
 90                 if(e==0)
 91                     break;
 92             }
 93             if(e==0)
 94             break;
 95         }
 96         if(e!=0)
 97             printf("Right\n");
 98         else
 99             printf("Wrong\n");
100     }
101     return 0;
102 }

 

转载于:https://www.cnblogs.com/archemiya/p/8490599.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值