傳說大禹治水的時候,水面上傳來了一隻神龜
龜背上有這樣的圖案
這就是幻方の由來
看完可以結合數形結合來食用更下飯
#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;
}