方法:
1、第一个数填第一行正中间。
2、以后依次往上一行后一列填,并遵循如下规则:
a、如果往上超出第一行则往最后一行开始;
b、如果往右超出最后一列则往第一列开始;
c、右上角填后要往下一行开始,列不变;
d、如果所要填数之前已填,则往他下面填。
3、循环第二步,直到方格填满。
#include<iostream>
using namespace std;
int main()
{
int a[20][20];
int T,n,i,j,k;
cin>>T;
while(T--)
{
cin>>n;
memset(a,0,sizeof(a));
k=1;
i=1;
j=n/2+1;
a[i][j]=k++;
while(k<=n*n)
{
i--;j++;
if(i==0 && j==n+1) {i+=2;j--;}
if(i<1) i=n;
if(j>n) j=1;
if(a[i][j]) {i+=2;j--;}
a[i][j]=k++;
}
for(i=1;i<=n;i++)
{
for(j=1;j<n;j++)
printf("%4d",a[i][j]);
printf("%4d\n",a[i][j]);
}
}
return 0;
} 原文地址:http://blog.csdn.net/a809146548/article/details/44178527