小米oj第54题 数独游戏

该代码实现了一个检查数独棋盘是否合法的程序。它遍历棋盘的行、列和宫格,确保每个1-9的数字只出现一次。通过比较每行、每列和每个宫格内的数字来验证合法性,如果发现重复则标记为非法。给定的两个数独棋盘案例中,第一个是合法的,第二个包含重复数字,因此输出分别为true和false。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

数独盘面是个九宫,每一宫又分为九个小格。在这八十一格中给出一定的已知数字和解题条件,利用逻辑和推理,在其他的空格上填入1-9的数字。使1-9每个数字在每一行、每一列和每一宫中都只出现一次,所以又称"九宫格"。 一个合法的数独棋盘满足上面的条件,即1-9每个数字在每一行、每一列和每一宫中都只出现一次,而并不要求一定有解。 请判断给出的数独棋盘是否合法。

举例: 有一个数独棋盘如下:

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

它是一个合法棋盘,输出true。
输入样例
5,3,-,6,-,-,-,9,8 -,7,-,1,9,5,-,-,- -,-,-,-,-,-,-,6,- 8,-,-,4,-,-,7,-,- -,6,-,8,-,3,-,2,- -,-,3,-,-,1,-,-,6 -,6,-,-,-,-,-,-,- -,-,-,4,1,9,-,8,- 2,8,-,-,-,5,-,7,9
5,3,-,6,-,-,-,9,8 -,7,-,1,9,5,-,-,- -,-,-,-,-,-,-,6,- 8,-,-,4,-,-,7,-,- -,6,-,8,-,3,-,2,- -,-,3,-,-,1,-,-,6 -,6,-,-,-,-,-,9,- -,-,-,4,1,9,-,8,- 2,8,-,-,-,5,-,7,9

输出样例
ture
false

我的提交

import java.util.*;

public class Main {
    public static void main(String args[]) {
        Scanner scan = new Scanner(System.in);
        String line;
        while (scan.hasNextLine()) {
            line = scan.nextLine().trim();
            // please write your code here
            String[] nums=line.split(" |,");
            int i=0;
            int j=0;
            boolean isvalid=true;
            for (i=0;i<9;i++)
            {
                String aline="";
                for(j=0;j<9;j++)
                {

                    if (!(nums[i*9+j].equals("-")))
                    {
                        aline = aline.concat(nums[i*9+j]);
                    }

                }

                for (int p = 0; p < aline.length(); p++) {
                    for (int q = p + 1; q < aline.length(); q++) {
                        int one = aline.charAt(p);
                        int two = aline.charAt(q);
                        if (one == two) {
//                            isvalid = false;
                        }
                        continue;
                    }
                }
            }

            for(i=0;i<9;i=i+3)
            {
                String aline="";
                if(!(nums[i].equals("-")))
                {
                    aline=aline.concat(nums[i]);
                }
                if(!(nums[i+1].equals("-")))
                {
                    aline= aline.concat(nums[i+1]);
                }
                if(!(nums[i+2].equals("-")))
                {
                    aline=aline.concat(nums[i+2]);
                }
                if(!(nums[i+9].equals("-")))
                {
                    aline= aline.concat(nums[i+9]);
                }
                if(!(nums[i+10].equals("-")))
                {
                    aline=aline.concat(nums[i+10]);
                }
                if(!(nums[i+11].equals("-")))
                {
                    aline= aline.concat(nums[i+11]);
                }
                if(!(nums[i+18].equals("-")))
                {
                    aline= aline.concat(nums[i+18]);
                }
                if(!(nums[i+19].equals("-")))
                {
                    aline= aline.concat(nums[i+19]);
                }
                if(!(nums[i+20].equals("-")))
                {
                    aline= aline.concat(nums[i+20]);
                }

                for (int p = 0; p < aline.length(); p++) {
                    for (int q = p + 1; q < aline.length(); q++) {
                        int one = aline.charAt(p);
                        int two = aline.charAt(q);
                        if (one == two) {
                            isvalid = false;
                        }
                        continue;
                    }
                }
            }

            for(i=27;i<36;i=i+3)
            {
                String aline="";
                if(!(nums[i].equals("-")))
                {
                    aline=aline.concat(nums[i]);
                }
                if(!(nums[i+1].equals("-")))
                {
                    aline= aline.concat(nums[i+1]);
                }
                if(!(nums[i+2].equals("-")))
                {
                    aline=aline.concat(nums[i+2]);
                }
                if(!(nums[i+9].equals("-")))
                {
                    aline= aline.concat(nums[i+9]);
                }
                if(!(nums[i+10].equals("-")))
                {
                    aline=aline.concat(nums[i+10]);
                }
                if(!(nums[i+11].equals("-")))
                {
                    aline= aline.concat(nums[i+11]);
                }
                if(!(nums[i+18].equals("-")))
                {
                    aline= aline.concat(nums[i+18]);
                }
                if(!(nums[i+19].equals("-")))
                {
                    aline= aline.concat(nums[i+19]);
                }
                if(!(nums[i+20].equals("-")))
                {
                    aline= aline.concat(nums[i+20]);
                }

                for (int p = 0; p < aline.length(); p++) {
                    for (int q = p + 1; q < aline.length(); q++) {
                        int one = aline.charAt(p);
                        int two = aline.charAt(q);
                        if (one == two) {
                            isvalid = false;
                        }
                        continue;
                    }
                }
            }

            for(i=54;i<63;i=i+3)
            {
                String aline="";
                if(!(nums[i].equals("-")))
                {
                    aline=aline.concat(nums[i]);
                }
                if(!(nums[i+1].equals("-")))
                {
                    aline= aline.concat(nums[i+1]);
                }
                if(!(nums[i+2].equals("-")))
                {
                    aline=aline.concat(nums[i+2]);
                }
                if(!(nums[i+9].equals("-")))
                {
                    aline= aline.concat(nums[i+9]);
                }
                if(!(nums[i+10].equals("-")))
                {
                    aline=aline.concat(nums[i+10]);
                }
                if(!(nums[i+11].equals("-")))
                {
                    aline= aline.concat(nums[i+11]);
                }
                if(!(nums[i+18].equals("-")))
                {
                    aline= aline.concat(nums[i+18]);
                }
                if(!(nums[i+19].equals("-")))
                {
                    aline= aline.concat(nums[i+19]);
                }
                if(!(nums[i+20].equals("-")))
                {
                    aline= aline.concat(nums[i+20]);
                }

                for (int p = 0; p < aline.length(); p++) {
                    for (int q = p + 1; q < aline.length(); q++) {
                        int one = aline.charAt(p);
                        int two = aline.charAt(q);
                        if (one == two) {
                            isvalid = false;
                        }
                        continue;
                    }
                }
            }


            for(i=0;i<3;i++)
            {
                String aline="";
                if(!(nums[i].equals("-")))
                {
                    aline= aline.concat(nums[i]);
                }
                if(!(nums[i+3].equals("-")))
                {
                    aline= aline.concat(nums[i+3]);
                }
                if(!(nums[i+6].equals("-")))
                {
                    aline= aline.concat(nums[i+6]);
                }
                if(!(nums[i+27].equals("-")))
                {
                    aline= aline.concat(nums[i+27]);
                }
                if(!(nums[i+30].equals("-")))
                {
                    aline= aline.concat(nums[i+30]);
                }
                if(!(nums[i+33].equals("-")))
                {
                    aline= aline.concat(nums[i+33]);
                }
                if(!(nums[i+54].equals("-")))
                {
                    aline= aline.concat(nums[i+54]);
                }
                if(!(nums[i+57].equals("-")))
                {
                    aline= aline.concat(nums[i+57]);
                }
                if(!(nums[i+60].equals("-")))
                {
                    aline= aline.concat(nums[i+60]);
                }



                for (int p = 0; p < aline.length(); p++) {
                    for (int q = p + 1; q < aline.length(); q++) {
                        int one = aline.charAt(p);
                        int two = aline.charAt(q);
                        if (one == two) {
                            isvalid = false;
                        }
                        continue;
                    }
                }
            }

            for(i=9;i<12;i++)
            {
                String aline="";
                if(!(nums[i].equals("-")))
                {
                    aline= aline.concat(nums[i]);
                }
                if(!(nums[i+3].equals("-")))
                {
                    aline= aline.concat(nums[i+3]);
                }
                if(!(nums[i+6].equals("-")))
                {
                    aline= aline.concat(nums[i+6]);
                }
                if(!(nums[i+27].equals("-")))
                {
                    aline= aline.concat(nums[i+27]);
                }
                if(!(nums[i+30].equals("-")))
                {
                    aline= aline.concat(nums[i+30]);
                }
                if(!(nums[i+33].equals("-")))
                {
                    aline= aline.concat(nums[i+33]);
                }
                if(!(nums[i+54].equals("-")))
                {
                    aline= aline.concat(nums[i+54]);
                }
                if(!(nums[i+57].equals("-")))
                {
                    aline= aline.concat(nums[i+57]);
                }
                if(!(nums[i+60].equals("-")))
                {
                    aline= aline.concat(nums[i+60]);
                }


                for (int p = 0; p < aline.length(); p++) {
                    for (int q = p + 1; q < aline.length(); q++) {
                        int one = aline.charAt(p);
                        int two = aline.charAt(q);
                        if (one == two) {
                            isvalid = false;
                        }
                        continue;
                    }
                }
            }

            for(i=18;i<21;i++)
            {
                String aline="";
                if(!(nums[i].equals("-")))
                {
                    aline= aline.concat(nums[i]);
                }
                if(!(nums[i+3].equals("-")))
                {
                    aline= aline.concat(nums[i+3]);
                }
                if(!(nums[i+6].equals("-")))
                {
                    aline= aline.concat(nums[i+6]);
                }
                if(!(nums[i+27].equals("-")))
                {
                    aline= aline.concat(nums[i+27]);
                }
                if(!(nums[i+30].equals("-")))
                {
                    aline= aline.concat(nums[i+30]);
                }
                if(!(nums[i+33].equals("-")))
                {
                    aline= aline.concat(nums[i+33]);
                }
                if(!(nums[i+54].equals("-")))
                {
                    aline= aline.concat(nums[i+54]);
                }
                if(!(nums[i+57].equals("-")))
                {
                    aline= aline.concat(nums[i+57]);
                }
                if(!(nums[i+60].equals("-")))
                {
                    aline= aline.concat(nums[i+60]);
                }


                for (int p = 0; p < aline.length(); p++) {
                    for (int q = p + 1; q < aline.length(); q++) {
                        int one = aline.charAt(p);
                        int two = aline.charAt(q);
                        if (one == two) {
                            isvalid = false;
                        }
                        continue;
                    }
                }
            }



            System.out.println(isvalid);


        }

    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值