70,040
社区成员
发帖
与我相关
我的任务
分享
#include<stdio.h>
int main()
{
int magc[][5] = {
{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}
};
int i, j,sum=0;
int L_sum = 0, C_sum[5] = { 0 }, diag1 = 0, diag2 = 0;
for (i = 0; i < 5; i++)/*遍历数组,取各行、列、对角和*/
{
for (j=0; j < 5; j++)
{
L_sum += magc[i][j];
C_sum[j] += magc[i][j];
if (i==j) diag1 += magc[i][j];/*计算主副对角和*/
if (i==(4-j)) diag2+=magc[i][j];/*计算副对角和*/
}
if (i)/*从第二行开始比较每行的和*/
{
if (sum == L_sum)
{
L_sum = 0;/*行和清零*/
continue;
}
else
printf("该数组不是幻方矩阵!\n");
return 0;/*如果行之和比较不同,立即终止程序。*/
}
sum += L_sum;
L_sum = 0;
}
if ((sum != diag1) || (sum != diag2) || (diag1 != diag2))/*比较行和与对角和*/
{
printf("该数组不是幻方矩阵!\n");
return 0;
}
for (i = 0; i < 5; i++)/*比较行和与列和*/
{
if (sum != C_sum[i])
printf("该数组不是幻方矩阵!\n");
}
printf("该数组是幻方矩阵!\n");
return 0;
仅供参考:
#include <stdio.h>
#define N 5 // 定义矩阵的维度为5
int main(void) {
int i, j;
int x[N][N] = {
{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}
}; // 初始化二维数组
int rowSum[N], colSum[N], diagSum1, diagSum2;
int flag = 1;
// 计算每行的和
for (i = 0; i < N; i++) {
rowSum[i] = 0;
for (j = 0; j < N; j++) {
rowSum[i] = rowSum[i] + x[i][j];
}
}
// 计算每列的和
for (j = 0; j < N; j++) {
colSum[j] = 0;
for (i = 0; i < N; i++) {
colSum[j] = colSum[j] + x[i][j];
}
}
// 计算主对角线的和
diagSum1 = 0;
for (j = 0; j < N; j++) {
diagSum1 = diagSum1 + x[j][j];
}
// 计算反对角线的和
diagSum2 = 0;
for (j = 0; j < N; j++) {
diagSum2 = diagSum2 + x[j][N - 1 - j];
}
// 判断是否为幻方
if (diagSum1 != diagSum2) {
flag = 0;
} else {
for (i = 0; i < N; i++) {
if ((rowSum[i] != diagSum1) || (colSum[i] != diagSum1)) {
flag = 0;
}
}
}
// 输出结果
if (flag) {
printf("It is a magic square!\n");
for (i = 0; i < N; i++) {
for (j = 0; j < N; j++) {
printf("%4d", x[i][j]);
}
printf("\n");
}
} else {
printf("It is not a magic square!\n");
}
return 0;
}