奇数的魔性矩阵其实挺好玩的,就是我们小时候经常玩的给你一个方格,不管你是横向加还是纵向加或是斜对角线相加起来它们的和是不变的,和是相同的。是不是会很好玩呢!现在我们就编程出这个好玩的游戏。给这个方形矩阵添加数字是按这样的原则的。首先现在第一行中间位置放1,然后下一个数字是当前数字的右上方位置,如果右上方超过了方形的边界,这是我们就把这个矩阵看成是上下相连左右相连,继续放在他的右上方。如有右上方有数了就放在这个数的正下方,这个地方有两种说法,这是第一种,另一种就是如果当前这个数能被方阵的长整除,那么就把这个数放在它的正下方。
代码如下
#include<stdio.h>
#include<string.h>
#include<math.h>
#include<stdlib.h>
#include<algorithm>
using namespace std;
int main()
{
int n,i,j;
int a[500][500];
while(~scanf("%d",&n))
{
memset(a,0,sizeof(a));
int m=n*n-1,k=1;
a[0][n/2]=k;
i=0;j=n/2;
while(m--)
{
if(a[(i-1+n)%n][(j+1)%n]==0)
{
i=(i-1+n)%n;
j=(j+1)%n;
a[i][j]=++k;
}
else
{
a[i+1][j]=++k;
i=i+1;
}
}
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
printf(j==n-1?"%d\n":"%d ",a[i][j]);
}
}
}
return 0;
}