应该知道幻方是什么东西吧?不知道也没关系,我帮你百度一下,你就知道了。(*^__^*) 嘻嘻……
幻方(Magic Square)是一种将数字安排在正方形格子中,使每行、列和对角线上的数字和都相等的方法。
也就是说一个n*n的格子填上1~n这n*n个数,使每一行每一列再加上斜行都等于相同的数。记得看射雕英雄传的时候看到这个幻方的来源。当时困扰了瑛姑10几年的数学难题就是这个幻方,没想到被我国古代杰出的数学家,园林学家,音乐家,老人家黄药师的女儿黄蓉给轻松破解了。真是哈哈哈哈。。。
好吧。无聊写了求n=奇数时的幻方,这个在小学的时候有学到过。后来在组合数学上第一章也有讲到,不过求偶数的幻方规律我还不会,有空再看看,嘎嘎嘎嘎。。。
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <algorithm>
#include <iostream>
#include <cmath>
#include <queue>
#include <map>
#include <stack>
#include <list>
#include <vector>
#include <ctime>
#define LL __int64
#define EPS 1e-8
using namespace std;
int a[1000][1000];
int n,i,j;
int main()
{
while (~scanf("%d",&n) && n)
{
if (n % 2==0)
{
printf("请输入奇数,ok?\n");
continue;
}
memset(a,0,sizeof(a));
a[1][n/2+1]=1;
int s=2;
int x=1,y=n/2+1;
while (s<=n*n)
{
x-=1;
y+=1;
if (x==0 && y==n+1)
{
x=2;y=n;
}
else if (x==0) x=n;
else if (y==n+1) y=1;
if (a[x][y])
{
x+=2;
y-=1;
}
a[x][y]=s++;
}
for (i=1;i<=n;i++)
{
for (j=1;j<=n;j++)
printf("%4d",a[i][j]);
printf("\n");
}
}
return 0;
}