九宫格是一款数字游戏,传说起源于河图洛书,现代数学中称之为三阶幻方。游戏规则是:将一个 9×9 的正方形区域划分为 9 个 3×3 的正方形宫位,要求 1 到 9 这九个数字中的每个数字在每一行、每一列、每个宫位中都只能出现一次。
本题并不要求你写程序解决这个问题,只是对每个填好数字的九宫格,判断其是否满足游戏规则的要求。
输入格式:
输入首先在第一行给出一个正整数 n(≤10),随后给出 n 个填好数字的九宫格。每个九宫格分 9 行给出,每行给出 9 个数字,其间以空格分隔。
输出格式:
对每个给定的九宫格,判断其中的数字是否满足游戏规则的要求。满足则在一行中输出 1,否则输出 0。
输入样例:
3
5 1 9 2 8 3 4 6 7
7 2 8 9 6 4 3 5 1
3 4 6 5 7 1 9 2 8
8 9 2 1 4 5 7 3 6
4 7 3 6 2 8 1 9 5
6 5 1 7 3 9 2 8 4
9 3 4 8 1 6 5 7 2
1 6 7 3 5 2 8 4 9
2 8 5 4 9 7 6 1 3
8 2 5 4 9 7 1 3 6
7 9 6 5 1 3 8 2 4
3 4 1 6 8 2 7 9 5
6 8 4 2 7 1 3 5 9
9 1 2 8 3 5 6 4 7
5 3 7 9 6 4 2 1 8
2 7 9 1 5 8 4 6 3
4 5 8 3 2 6 9 7 1
1 6 3 7 4 9 5 8 3
81 2 5 4 9 7 1 3 6
7 9 6 5 1 3 8 2 4
3 4 1 6 8 2 7 9 5
6 8 4 2 7 1 3 5 9
9 1 2 8 3 5 6 4 7
5 3 7 9 6 4 2 1 8
2 7 9 1 5 8 4 6 3
4 5 8 3 2 6 9 7 1
1 6 3 7 4 9 5 8 2
输出样例:
1
0
0
代码 注意int flag[10]={0}; 的用法
#include <stdio.h>
//#define m 10 int flag[m] = {0}; 定义宏正确 变量错误 即使变量赋值 结构体里的也不能直接用这
//exit(1); 要用#include <stdlib.h> clang报错 gcc警告
int main()
{
//int flag[10]={2};printf("%d\n",flag[4]);不管大括号里时几 最后都是0
int n;
scanf("%d",&n);
int map[9][9];
while(n--)
{
int error = 0;
for (int i=0;i<9;i++)
{
for (int j=0;j<9;j++)
{
scanf("%d",&map[i][j]);
if (map[i][j]<=0 || map[i][j]>=10) //输入的值有不在1-9的等输入完直接输出0
{
error = 1;
}
}
}
if (error)
{
printf("0\n");
continue;
}
int win = 1 ;
for (int i=0;i<9;i++) //判断行和列
{
int flag[10] = {0}, flag1[10] = {0}; //必须加int
for(int j=0;j<9;j++)
{
if(flag[map[i][j]] || flag1[map[j][i]])
{
win = 0;
break;
}
else
{
flag[map[i][j]] = 1;
flag1[map[j][i]] = 1;
}
}
if (!win)
break;
}
if (!win)
{
printf("0\n");
continue;
}
for (int ii=0;ii<9;ii+=3) //判断9个宫位
{
int flag[10]={0}; //重新赋值0
for (int i=ii;i<3;i++)
{
for (int j=ii;j<3;j++)
{
if (flag[map[i][j]])
{
win = 0;
break;
}
else
flag[map[i][j]] = 1;
}
if (!win)
break;
}
if (!win)
break;
}
if (!win)
printf("0\n");
else
printf("1\n");
}
}