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

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 2020长安杯与连接网探
  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么
  • ¥15 banner广告展示设置多少时间不怎么会消耗用户价值
  • ¥16 mybatis的代理对象无法通过@Autowired装填
  • ¥15 可见光定位matlab仿真
  • ¥15 arduino 四自由度机械臂
  • ¥15 wordpress 产品图片 GIF 没法显示
  • ¥15 求三国群英传pl国战时间的修改方法
  • ¥15 matlab代码代写,需写出详细代码,代价私
  • ¥15 ROS系统搭建请教(跨境电商用途)