方法:
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