魔方矩阵 在魔方阵中,所有的行、列和对角线都拥有相同的和。例如:17 24 1 8 15 23 5 7 14 16 4 9 24 6 13 20 22 和 3 5 710 12 19 21 3 8 1 611 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;
}