检验并打印幻方矩阵

题目内容:

幻方矩阵是指该矩阵中每一行、每一列、每一对角线上的元素之和都是相等的。从键盘输入一个5×5的矩阵并将其存入一个二维整型数组中,检验其是否为幻方矩阵,并将其按指定格式显示到屏幕上。

输入格式: “%d”

输出格式

如果是幻方矩阵,输出提示信息: “It is a magic square!\n”

矩阵元素的输出: “%4d”(换行使用"\n")

如果不是幻方矩阵,输出提示信息: “It is not a magic square!\n”

输入样例1:

17_24_1_8_15

23_5_7_14_16

4_6_13_20_22

10_12_19_21_3

11_18_25_2_9

(输人样例中“_”代表空格)

输出样例1:

It is a magic square!

1724***1*815

23571416

46132022

10121921***3

111825*2***9

(输出样例中“*”代表空格)

输入样例2:

1_0_1_6_1

3_1_1_1_1

1_1_1_1_2

1_1_1_1_1

9_1_7_1_1

(输人样例中“_”代表空格)

输出样例2:

It is not a magic square!

#include<stdio.h>
#define N 5
void input(int a[][N]);
int  magic(int a[][N]);
void output(int a[][N]);
int main()
{
  int a[N][N],n;
  input(a);
  n=magic(a);
  if(n==1)
  output(a);
}
void input(int a[][N])              //输入一个数组
{
  int i,j;
  for(i=0;i<N;i++)
  {
    for(j=0;j<N;j++)
    {
      scanf("%d",&a[i][j]);
    }

  }
}

int magic(int a[][N])            //检测是否为幻方矩阵
{
  int i,j,k=0,n=0,s,l=0,q=0,sum=0;
  int b[N],c[N];
  for(i=0;i<N;i++)
  {
    sum=0;
    for(j=0;j<N;j++)
    {
      sum+=a[i][j];
    }
    b[i]=sum;                           //将每一行的所有数之和存到一个数组里
  }
if(b[1]==b[2]&&b[2]==b[3]&&b[3]==b[4]&&b[1]==b[0])
        k++;                           //如果每一行的数字和相等k加1

  for(j=0;j<N;j++)
  {
     sum=0;
     for(i=0;i<N;i++)
     {
       sum+=a[i][j];
     }
     c[j]=sum;                         //将每一列的数字和存进一个数组里
  }
if(c[1]==c[2]&&c[2]==c[3]&&c[3]==c[4]&&c[1]==c[0])
        k++;

  for(s=0;s<N;s++)
  {
    n+=a[s][s];                  
    l+=a[N-1-s][N-1-s];               //n,l代表两个对角线的数字和
  } 
  if(n==l) k++;
  if(k==3)
  { 
    if(b[0]==c[0]&&b[0]==n)
     {
	 printf("It is a magic square!\n");
	 return 1;
	 }
	else
      printf("It is not a magic square!\n");
  }
  else
     printf("It is not a magic square!\n");

}

void output(int a[][N])               //输出数组
{
  int i,j;
  for(i=0;i<N;i++)
  {
    for(j=0;j<N;j++)
    {

      printf("%4d",a[i][j]);
    }
    printf("\n");
  }
}

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值