C语言每日一题—判断是否为魔方矩阵

本文介绍了一个C++程序,用于输入一个二维整型数组,通过计算行和、列和以及对角线和,判断其是否满足魔方矩阵的条件:所有行、列和对角线的和相等。
摘要由CSDN通过智能技术生成
魔方矩阵
在魔方阵中,所有的行、列和对角线都拥有相同的和。例如:
 17	 24	  1	  8	 15					
 23	  5	  7	 14	 16		4	  9	  2
  4	  6 	 13	 20	 22	    和	3	  5	  7
 10	 12	 19	 21	  3		8	  1 	  6
 11	 18	 25	  2 	  9					

写一个程序读入一个二维整型数组并判断它是否为魔方矩阵。

**输入格式要求:"%d" 
提示信息:"请输入矩阵的阶数(<=10):" "请输入矩阵:\n"  "a[%d][%d]:"
**输出格式要求:"该矩阵不是魔方阵!\n"  "该矩阵为魔方矩阵!"

程序运行示例:
请输入矩阵的阶数(<=10):3
请输入矩阵:
a[0][0]:4
a[0][1]:6
a[0][2]:3
a[1][0]:8
a[1][1]:1
a[1][2]:9
a[2][0]:4
a[2][1]:6
a[2][2]:8
该矩阵不是魔方阵!
#include<stdio.h>

int main()
{
    int a[10][10],n,flag=1;
    printf("请输入矩阵的阶数(<=10):");
    scanf("%d",&n);
    printf("请输入矩阵:\n");
    int i,j;
    for(i=0;i<n;i++)
    {
        for(j=0;j<n;j++)
        {
            printf("a[%d][%d]:",i,j);
            scanf("%d",&a[i][j]);
        }
    }
    int sum=0,s1[10],s2[10],s3=0,s4=0;
    for(i=0;i<n;i++)
    {
        for(j=0;j<n;j++)
        {
            sum+=a[i][j];
        }
        s1[i]=sum;//将每一行的和保存到s1数组中
        sum=0;
    }
    for(j=0;j<n;j++)
    {
        for(i=0;i<n;i++)
        {
            sum+=a[i][j];
        }
        s2[j]=sum;将每列的和保存到s2数组中
        sum=0;
    }
    for(i=0;i<n;i++)
    {
        s3+=a[i][i];//主对角线之和
        s4+=a[i][n-i-1];//副对角线之和
    }
    for(i=0;i<n;i++)
    {
        if(s1[0]!=s1[i]) flag=0;//让每一行之和相等
        if(s2[0]!=s2[i]) flag=0;//让每一列之和相等
        if(s1[0]!=s2[0]) flag=0;//让行之和与列之和相等
        if(s1[0]!=s3) flag=0;//让行之和与主对角线之和相等
        if(s1[0]!=s4) flag=0;//让行之和与副对角线之和相等
    }
    if(flag==1) printf("该矩阵为魔方矩阵!");
    else printf("该矩阵不是魔方阵!\n");
    return 0;
}

2024.8.7题解

#include<stdio.h>

const int size = 10;

void init(int a[][size],int n)
{
	int i, j;
	for (i = 0; i < n; i++)
	{
		for (j = 0; j < n; j++)
		{
			printf("a[%d][%d]:", i, j);
			scanf_s("%d", &a[i][j]);
		}
	}
}

int deng(int a[], int n)//判断一个数组里面的数是不是全相等
{
	int x = a[0];
	int i;
	for (i = 1; i < n; i++)
	{
		if (a[i] != x) return 0;
	}
	return 1;
}

void sum_hang(int a[][size], int sum1[], int n)
{
	int i, j;
	for (i = 0; i < n; i++)
	{
		for (j = 0; j < n; j++)
		{
			sum1[i] += a[i][j];
		}
	}
}
void sum_lie(int a[][size], int sum2[], int n)
{
	int i, j;
	for (i = 0; i < n; i++)
	{
		for (j = 0; j < n; j++)
		{
			sum2[i] += a[j][i];
		}
	}
}
void sum_duijiao(int a[][size], int sum3[],int n)
{
	int i, j;
	for (i = 0; i <= 1; i++)
	{
		for (j = 0; j < n; j++)
		{
			if (i == 0)sum3[i] += a[j][j];
			if (i == 1)sum3[i] += a[j][n - 1 - j];
		}
	}
}

void judge(int a[][size], int n)
{
	int sum1[size] = { 0 }, sum2[size] = { 0 }, sum3[2] = { 0 };
	
	sum_hang(a, sum1, n);
	sum_lie(a, sum2, n);
	sum_duijiao(a, sum3, n);

	if (deng(sum1, n) && deng(sum2, n) && deng(sum3, 2)
		&& sum1[0] == sum2[0] && sum1[0] == sum3[0]) printf("是魔方矩阵");
	else printf("不是魔方矩阵");
}

int main()
{
	int n;
	int a[size][size];
	printf("请输入矩阵的阶数(<=10):");
	scanf_s("%d", &n);
	printf("请输入矩阵:\n");
	init(a, n);
	judge(a, n);
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值