九宫格是一款数字游戏,传说起源于河图洛书,现代数学中称之为三阶幻方。游戏规则是:将一个 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
先判断大正方形是否符合标准,数字个数和行和列,在判断小正方形是否符合标准
#include <iostream>
#include <vector>
#include <cstring>
#include <algorithm>
using namespace std;
const int N = 1001;
int n;
int g[N][N],num[10];
int main(void)
{
cin >> n;
while(n--)
{
bool flag = true;
memset(num,0,sizeof num);
for(int i=0;i<9;i++)
{
for(int j=0;j<9;j++)
{
cin >> g[i][j];
num[g[i][j]]++;
}
}
for(int i=1;i<10;i++)
// 判断数字个数是否符合标准
if(num[i]!=9) flag = false;
if(flag)
{
for(int i=0;i<3;i++)
{
for(int j=0;j<3;j++)
{
int sum = 0;
for(int a=0;a<3;a++)
{
for(int b=0;b<3;b++)
{
sum += g[3*i+a][3*j+b];
}
}
// 如果合法,则每个小正方形的和都是45
if(sum!=45)
{
flag = false;
break;
}
}
}
}
if(flag)
{
// 判断行和列数字出现次数是否合法
for(int i=0;i<9;i++)
{
int sum=0;
for(int j=0;j<9;j++)
{
sum += g[i][j];
}
if(sum!=45)
{
flag = false;
break;
}
}
}
if(flag)
{
for(int i=0;i<9;i++)
{
int sum=0;
for(int j=0;j<9;j++)
{
sum += g[j][i];
}
if(sum!=45)
{
flag = false;
break;
}
}
}
cout << (flag?1:0) << endl;
}
return 0;
}
感谢查看!