平平无奇的编程萌新 2021-12-05 19:17 采纳率: 95.2%
浏览 104
已结题

51nod-小明与数独

现在小明已经做好了一些填好了所有数字的数独游戏题面,正准备挖空。但在此之前,他希望你帮忙检查一下题面是否正确,即做好的题面是否每个格子都满足所在行、列、小九宫格都包含1~9。

输入
第一行输入一个数T,表示小明已完成的数独题面个数。
之后每个题面输入共9行,每行9个数以空格隔开,表示填好的数独中的数字。
输出
输出共T行,每行一个字符串表示该数独题面是否正确。
正确输出"YES",错误则输出"NO"。
数据范围
对于100%的数据,1≤T≤5,1≤每个数字≤9。
输入样例
2
7 6 2 5 9 3 1 4 8
9 4 1 2 7 8 5 3 6
8 3 5 4 6 1 7 9 2
1 9 8 6 2 7 3 5 4
4 7 6 3 5 9 2 8 1
2 5 3 8 1 4 6 7 9
3 8 7 1 4 6 9 2 5
5 1 4 9 3 2 8 6 7
6 2 9 7 8 5 4 1 3
8 1 4 7 3 2 6 5 9
9 2 3 6 5 8 1 4 7
5 7 6 4 9 1 2 8 3
3 4 5 2 6 7 8 9 1
1 8 9 3 4 5 3 2 6
2 6 7 1 8 9 5 3 4
7 5 1 9 2 4 7 6 8
4 3 8 5 7 6 9 1 2
6 9 2 8 1 3 4 7 5
输出样例
YES
NO

  • 写回答

2条回答 默认 最新

  • [PE]经典八炮 2021-12-05 19:35
    关注
    #include<iostream>
    bool func(int a[9][9])
    {
        for (int i = 0; i < 9; i++)//列
        {
            int b[9]{};
            for (int j = 0; j < 9; j++)
            {
                b[a[i][j] - 1]++;
            }
            for (int j = 0; j < 9; j++)
            {
                if (b[j] != 1)
                    return false;
            }
        }
        for (int i = 0; i < 9; i++)//行
        {
            int b[9]{};
            for (int j = 0; j < 9; j++)
            {
                b[a[j][i] - 1]++;
            }
            for (int j = 0; j < 9; j++)
            {
                if (b[j] != 1)
                    return false;
            }
        }
        for (int i = 0; i < 3; i++)//小格子
        {
            for (int j = 0; j < 3; j++)
            {
                int b[9]{};
                for (int k = i * 3; k < i * 3 + 3; k++)
                {
                    for (int l = j * 3; l < j * 3 + 3; l++)
                    {
                        b[a[k][l] - 1]++;
                    }
                }
                for (int k = 0; k < 9; k++)
                {
                    if (b[k] != 1)
                        return false;
                }
            }
        }
        return true;
    }
    int main()
    {
        int T;
        std::cin >> T;
        while (T--)
        {
            int a[9][9];
            for (int i = 0; i < 9; i++)
            {
                for (int j = 0; j < 9; j++)
                    std::cin >> a[i][j];
            }
            std::cout << (func(a) ? "YES\n" : "NO\n");
        }
        return 0;
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 12月14日
  • 已采纳回答 12月6日
  • 创建了问题 12月5日

悬赏问题

  • ¥15 pcl运行在qt msvc2019环境运行效率低于visual studio 2019
  • ¥15 MAUI,Zxing扫码,华为手机没反应。可提高悬赏
  • ¥15 python运行报错 ModuleNotFoundError: No module named 'torch'
  • ¥100 华为手机私有App后台保活
  • ¥15 sqlserver中加密的密码字段查询问题
  • ¥20 有谁能看看我coe文件到底哪儿有问题吗?
  • ¥20 我的这个coe文件到底哪儿出问题了
  • ¥15 matlab使用自定义函数时一直报错输入参数过多
  • ¥15 设计一个温度闭环控制系统
  • ¥100 rtmpose姿态评估