1309 简化版九宫格

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;
}
posted @ 2021-01-24 12:15  傻傻的小小豪  阅读(224)  评论(0编辑  收藏  举报