zoukankan      html  css  js  c++  java
  • 1005. 数独

    题目来源:https://acm.sjtu.edu.cn/OnlineJudge/problem/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

    解题:

      此题只是对传统数独的校验,较为简单,分别校验行,列,小块

    答案:

    import java.util.HashSet;
    import java.util.Scanner;
    
    public class Main {
        public static void main(String[] args) {
            Scanner sc = new Scanner(System.in);
            int n = sc.nextInt();
            int[][][] sudoku = new int[n][9][9];
            boolean[] check = new boolean[n];
            for (int i = 0; i < n; i++) {
                check[i] = true;
                for (int j = 0; j < 9; j++) {
                    HashSet<Integer> seth = new HashSet();
                    for (int k = 0; k < 9; k++) {
                        sudoku[i][j][k] = sc.nextInt();
                        seth.add(sudoku[i][j][k]);
                    }
                    if (seth.size() < 9) {
                        check[i] = false;
                    }
                }
            }
            for (int i = 0; i < n; i++) {
                if (check[i]) {
                    for (int j = 0; j < 9; j++) {
                        HashSet setl = new HashSet();
                        for (int k = 0; k < 9; k++) {
                            setl.add(sudoku[i][k][j]);
                        }
                        if (setl.size() < 9) {
                            check[i] = false;
                        }
                    }
                }
            }
            for (int i = 0; i < n; i++) {
                if (check[i]) {
                    for (int j = 0; j < 9; j++) {
                        HashSet set = new HashSet();
                        int countl = 0;
                        for (int k = 0; k < 3; k++) {
                            int counth = 0;
                            for (int l = 0; l < 3; l++) {
                                set.add(sudoku[i][k + countl][l + counth]);
                            }
                            counth += 3;
                        }
                        countl += 3;
                        if (set.size() < 9) {
                            check[i] = false;
                        }
                    }
                }
            }
    
            for (int i = 0; i < n; i++) {
                System.out.println(check[i] ? "Right" : "Wrong");
            }
        }
    }

    or

    import java.util.Arrays;
    import java.util.Scanner;
     
    public class Main {
     
        private static Scanner in;
     
        public static void main(String[] args) {
            in = new Scanner(System.in);
            int n = in.nextInt();
            outer:
            for(int t=0;t<n;t++){
                int factor[][]=new int[9][9];
                for(int i=0;i<9;i++){
                    for(int j=0;j<9;j++){
                        factor[i][j]=in.nextInt();
                    }
                }
                for(int i=0;i<9;i+=3){
                    for(int j=0;j<9;j+=3){
                        int s[]=new int[9];
                        int f=0;
                        for(int h=i;h<i+3;h++){
                            for(int k=j;k<j+3;k++){
                                s[f]=factor[h][k];
                                f++;
                            }
                        }
                        Arrays.sort(s);
                        for(int h=0;h<8;h++){
                            if(s[h]==s[h+1]){
                                System.out.println("Wrong");
                                continue outer;
                            }
                        }
                    }
     
                }
                for(int i=0;i<9;i++){
                    int s[]=new int[9];
                    for(int j=0;j<9;j++){
                        s[j]=factor[i][j];
                    }
                    Arrays.sort(s);
                    for(int h=0;h<8;h++){
                        if(s[h]==s[h+1]){
                            System.out.println("Wrong");
                            continue outer;
                        }
                    }
                     
                }
                for(int i=0;i<9;i++){
                    int s[]=new int[9];
                    for(int j=0;j<9;j++){
                        s[j]=factor[j][i];
                    }
                    Arrays.sort(s);
                    for(int h=0;h<8;h++){
                        if(s[h]==s[h+1]){
                            System.out.println("Wrong");
                            continue outer;
                        }
                    }
                }
                System.out.println("Right");
            }
        }
     
    }

     or

    #include <iostream>
    #include <algorithm>
    using namespace std;
    
    bool isunique(int a[])
    {
        bool flag = true;
        sort(a, a + 9);
        for (int i = 0; i < 9; i++)
            if (a[i] != i + 1)
            {
            flag = false;
            break;
            }
        return flag;
    }
    string issudoku()
    {
        string si;
        int su[9][9], s[9];
        for (int i = 0; i < 9; i++)
            for (int j = 0; j < 9; j++)
                cin >> su[i][j];
        bool flag = true;
        for (int i = 0; i < 9; i++)
        {
            for (int j = 0; j < 9; j++)
                s[j] = su[i][j];
            if (!isunique(s))
            {
                flag = false;
                break;
            }
        }
        for (int i = 0; i < 9; i++)
        {
            for (int j = 0; j < 9; j++)
                s[j] = su[j][i];
            if (!isunique(s))
            {
                flag = false;
                break;
            }
        }
        for (int i = 0; i < 9; i += 3)
            for (int j = 0; j < 9; j += 3)
            {
            for (int m = 0; m < 3; m++)
                for (int n = 0; n < 3; n++)
                    s[3 * m + n] = su[i + m][j + n];
            if (!isunique(s))
            {
                flag = false;
                break;
            }
            }
        if (flag)
            si = "Right";
        else
            si = "Wrong";
        return si;
    }
    int main()
    {
        int n;
        cin >> n;
        string s[20];
        for (int i = 0; i < n; i++)
            s[i] = issudoku();
        for (int i = 0; i < n; i++)
            cout << s[i] << endl;
        return 0;
    
    }
  • 相关阅读:
    idea创建maven web项目需要注意的一些细节
    idea中默认maven配置
    怎么写开发用例?
    css样式 给div水平垂直居中
    elementUI日期选择器里禁用选择未来时间
    常用的正则表达式
    Unknown custom element: <el-table-column>
    几个简单的JavaScript字符串方法
    新的vue-cli默认禁止了commonjs语法,可以添加babel解决
    解决webstorm左下角没有vue的npm项目启动快捷方式
  • 原文地址:https://www.cnblogs.com/chenglc/p/10869866.html
Copyright © 2011-2022 走看看