C语言二维整形数组,检验是否为魔方矩阵
在下面的5×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
求教,没有太多思路{:10_266:}
谢谢
这是检查方阵是否魔法方阵而不是s1e33的打印魔法方阵对吧?
我先讲讲我的思路:
0:使用一个数组存放这些数
1:计算数组元素个数,开方确定大小n
2:再定义出一个n * n的二维数组,将上面读取的数放进去
3:用一个数组存放每行、每列、两个对角所有数相加的结果
4:对比输出判断结果 本帖最后由 alexw_h264 于 2020-2-18 21:43 编辑
#include <stdio.h>
#define N 5
int main()
{
int a = {
{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;
int row_sum, col_sum, cross_sum, sum_array, *p;
int is_magic_mtx = 1;
//求每行、每列的累加值
for (i = 0; i < N; i++)
{
row_sum = 0;
col_sum = 0;
for (j = 0; j < N; j++)
{
row_sum += a;
col_sum += a;
}
}
//求对角线上的累加值
cross_sum = 0;
cross_sum = 0;
for (i = 0; i < N; i++)
{
cross_sum += a;
cross_sum += a;
}
//放在一维数组里
p = sum_array;
for (i = 0; i < N; i++)
{
*p++ = row_sum;
}
for (i = 0; i < N; i++)
{
*p++ = col_sum;
}
*p++ = cross_sum;
*p++ = cross_sum;
//判断是否为魔方矩阵
for (i = 0; (i < (2*N+2)) && is_magic_mtx; i++)
{
int cur = sum_array;
for (j = i+1; j < (2*N+2); j++)
{
if (sum_array != cur)
{
is_magic_mtx = 0;
break;
}
}
}
if (is_magic_mtx)
{
for (i = 0; i < N; i++)
{
for (j = 0; j < N; j++)
{
printf("%3d,\t", a);
}
printf("\n");
}
}else
{
printf("not a magic matrix");
}
return 0;
}
页:
[1]