传
说
大
禹
治
水
的
时
候
,
水
面
上
传
来
了
一
只
传说大禹治水的时候,水面上传来了一只
传说大禹治水的时候,水面上传来了一只神龟
龟 背 上 有 这 样 的 图 案 龟背上有这样的图案 龟背上有这样的图案
这 就 是 这就是 这就是幻方 の 由 来 の由来 の由来
小 学 肆 年 级 幻 方 奥 数 题 库 小学肆年级幻方奥数题库 小学肆年级幻方奥数题库
看 完 可 以 结 合 看完可以结合 看完可以结合 数 形 结 合 数形结合 数形结合 来 食 用 更 下 饭 来食用更下饭 来食用更下饭
#include<cstdio>
#define re register
#define f(i, a, b) for(re int i = a; i <= b; ++i)
using namespace std;
int n, ms[40][40], i, j;//magic square
signed main(){
scanf("%d", &n);
if(n == 1){//特判
printf("1\n");
return 0;
}
ms[1][(n + 1) >> 1] = 1;//将1写在第一行的中间
i = 1;
j = (n + 1) >> 1;
f(k, 2, n * n){
if(i == 1 && j != n){//方式1
ms[n][j + 1] = k;
i = n;
++j;
continue;
}
if(i != 1 && j == n){//方式2
ms[i - 1][1] = k;
--i;
j = 1;
continue;
}
if(i == 1 && j == n){//方式3
ms[i + 1][j] = k;
++i;
// j = j;
continue;
}
if(i != 1 && j != n){//方式4
if(ms[i - 1][j + 1] == 0){
ms[i - 1][j + 1] = k;
--i;
++j;
continue;
}
else{
ms[i + 1][j] = k;
++i;
// j = j;
continue;
}
}
}
f(x, 1, n){
f(y, 1, n)
(y != n) ? printf("%d ", ms[x][y]) : printf("%d", ms[x][y]);
printf("\n");
}
return 0;
}