#c N宫格-横竖斜的和相等
要求
一个n阶n×n的矩阵,由数字1,2,⋯,n×n 构成,且满足每一行、每一列、两条对角线的数的和都相等。例如以下是一个3阶的。
816
357
492
它满足:
每一行的和都是15:8+1+6=15、3+5+7=15、4+9+2=15
每一列的和都是15: 8+3+4=15、1+5+9=15、6+7+2=15
两条对角线的和也是15:8+5+2=15、4+9+2=15。
话不多说直接上代码!!!
#include<stdio.h>
int main()
{
int n;
int k[40][40] = { 0 }; // 幻方的矩阵
scanf("%d", &n);
int b = n / 2 + 1, a = 1, c, d;
for (int i = 1; i <= n * n; i++) {
if (i == 1) {
k[a][b] = 1;
continue;
}
c = a, d = b,a--, b++;
if (a < 1)a = n;
if (b > n)b = 1;
if (k[a][b] == 0)k[a][b] = i;
else {
a = c, b = d;
a++;
k[a][b] = i;
}
}
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= n; j++) {
printf("%d", k[i][j]);
printf("%c", j == n ? '\n' : ' ');
}
}
return 0;
}
分析思路
1.首行中间位置填入1。
2.设前一次在x行y列处填入a。如果x-1行、y+1列(即右上一格)还没填入数字,则在该位置填入a+1。否则,在x+1行、y列(即下方一格)位置填入a+1。注意,如果x-1超出上边界,则变成最后一行,即实现循环减1。对y+1操作同理。
3.重复步骤2,直到填入n×n。
流程图如下

ps:小白一只如有不对请指正!谢谢!