zoukankan      html  css  js  c++  java
  • 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
    ");
     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
    ");
     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
    ");
     98         else
     99             printf("Wrong
    ");
    100     }
    101     return 0;
    102 }
  • 相关阅读:
    888. Uncommon Words from Two Sentences
    344. Reverse String
    151. Reverse Words in a String
    557. Reverse Words in a String III
    811. Subdomain Visit Count
    上海市公积金、养老保险、医疗保险转出事宜
    476. Number Complement
    方法重载的条件
    简单工厂模式
    单例模式
  • 原文地址:https://www.cnblogs.com/archemiya/p/8490599.html
Copyright © 2011-2022 走看看