n阶幻方矩阵验证(数组)

题目描述

n阶幻方矩阵是指将1,2,3,...,n²数字填入n*n矩阵中,每行和,每列和,两条对角线的和均相等。给定n阶矩阵,验证是否n阶幻方矩阵。

输入

测试次数t

每组测试数据为:矩阵大小n,后跟n*n的矩阵数据。

输出

对每组测试数据,输出判定结果,YES或NO

输入样例

3
3
8 1 6 
3 5 7
4 9 2
4
1   2 15 16
12 14  3  5
13  7 10  4
8  11  6  9
3
1 2 3
4 5 6
7 8 9

输出样例

YES
YES
NO
#include <stdio.h>
#define maxn 100

int main()
{
	int m, n;
	int i, j, k, h;
	int flag;
	int a[maxn][maxn], b[maxn], count[maxn] = {0};
	scanf("%d", &m);
	for(k=1;k<=m;k++)
	{
		scanf("%d", &n);
		for(i=0;i<n;i++)
		{
			for(j=0;j<n;j++)
			{
				scanf("%d", &a[i][j]);      //输入数组
			}
		}
		h = 0;
		for(i=0;i<n;i++)
		{
			for(j=0;j<n;j++)
			{
				b[h] = a[i][j];           //将二维数组转为一维数组方便后续操作
				h++;
			}
		}
		
		for(i=0;i<n;i++)
		{
			for(j=i+1;j<n;j++)
			{
				if(b[i] == b[j])         //判断数组中的每个数是否都不相等
				{
					flag = 1;
				}
			}
			if(flag == 1)
		        break;
		}
		if(flag  != 1)
		{
			h = 0;
			
			for(i=0;i<n;i++)
		    {
			    for(j=0;j<n;j++)
			    {
			    	count[h] += a[i][j];     //横排
			    }
			    h++;
	    	}
	    	
	        for(j=0;j<n;j++)
		    {
			    for(i=0;i<n;i++)
			    {
			    	count[h] += a[i][j];     //竖排
			    }
			    h++;
	    	}
	    	
        	for(i=0;i<n;i++)
		    {
			    for(j=0;j<n;j++)
			    {
			    	if(i == j)
			    	{
			    		count[h] += a[i][j];   //主对角线
					}
			    }
			    
	    	}
	    	h++;
	    	for(i=0,j=n-1;i<n;i++,j--)
		    {
			    count[h] += a[i][j];       //副对角线
			    
	    	}
	    	h++;
	    	for(i=1;i<h;i++)
	    	{
	    		if(count[0] != count[i])   //判断各和是否相等
	    		flag = 1;
	    		else flag = 0;
			}
		}
		if(flag == 1)
		    printf("NO\n");
		else if(flag == 0)
		    printf("YES\n");
		    
		for(i=0;i<h;i++)
		{
			count[i] = 0;                 //初始化count数组
		}
	}
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值