1309 简化版九宫格
题目描述
相信大家都玩过“九宫格”这个游戏!下面我就再简述一下规则,在一个9 * 9的网格中填数字19,只要使得19这9个数字在每行和每列出现且仅出现一次即可。现给出一个这样的9 * 9矩阵,判断它是否满足上述规则,并求两条对角线和。
输入要求
输入一个9*9数的矩阵。
输出要求
输出有两行。第一行:如果输入的矩阵满足所述规则,输出YES;否则输出NO。第二行:两条对角线的和,大的在前面。
测试数据
//输入
1 2 3 4 5 6 7 8 9
1 2 3 4 5 6 7 8 9
1 2 3 4 5 6 7 8 9
1 2 3 4 5 6 7 8 9
1 2 3 4 5 6 7 8 9
1 2 3 4 5 6 7 8 9
1 2 3 4 5 6 7 8 9
1 2 3 4 5 6 7 8 9
1 2 3 4 5 6 7 8 9
//输出
NO
45 45
AC代码
给一个符合九宫格要求的输入,省的你们去找
//输入
1 2 3 4 5 6 7 8 9
8 7 9 1 2 3 4 5 6
4 5 6 7 8 9 1 2 3
3 1 2 9 4 5 6 7 8
6 8 7 3 1 2 9 4 5
9 4 5 6 7 8 3 1 2
2 3 1 5 6 4 8 9 7
7 9 8 2 3 1 5 6 4
5 6 4 8 9 7 2 3 1
//输出
YES
47 42
注意最后两条对角线和是大的排前面
#include <bits/stdc++.h>
using namespace std;
int a[10005],num[10][10];
void init()
{
for(int i=1;i<10;i++) a[i]=0;
}
bool find()
{
for(int i=1;i<10;i++)
{
if(a[i]!=1) return true;
}
return false;
}
int main() {
int sum1=0,sum2=0,f=1;
for(int i=0;i<9;i++)
{
for(int j=0;j<9;j++)
{
cin>>num[i][j];
if(i==j) sum1+=num[i][j];
if(i+j==8) sum2+=num[i][j];
}
}
for(int i=0;i<9;i++)
{
init();
for(int j=0;j<9;j++)
{
if(num[i][j]<0) continue;
a[num[i][j]]++;
}
if(find()) f=0;
}
for(int i=0;i<9;i++)
{
init();
for(int j=0;j<9;j++)
{
if(num[j][i]<0) continue;
a[num[j][i]]++;
}
if(find()) f=0;
}
if(f) cout<<"YES"<<endl;
else cout<<"NO"<<endl;
if(sum2>sum1) swap(sum1,sum2);
cout<<sum1<<" "<<sum2<<endl;
return 0;
}