以下是 从 内向外的模拟,就是1在二维数组的中间的位置, 代码如下
#include <iostream>
#include <cstdlib>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
int f[1000][1000],s,l=1,i,j,k=1;
int main(void)
{
int n;
cin>>n;
i=n+1>>1;j=n+1>>1;
f[n+1>>1][n+1>>1]=l;
while (l<=n*n){
for(int a=1;a<=k;a++)f[i][++j]=++l;
for(int a=1;a<=k;a++)f[--i][j]=++l;
k++;
for(int a=1;a<=k;a++)f[i][--j]=++l;
for(int a=1;a<=k;a++)f[++i][j]=++l;
k++;
}
for(int a=1;a<=n;a++)
{//从头到位遍历整个二维数组
for(int b=1;b<=n;b++)
{
if(b!=n)
cout<<f[a][b]<<" ";
else
cout<<f[a][b];
if(a+b==n||a==b)
s+=f[a][b];//求对角线元素的和
}
cout<<endl;
}
cout<<s<<endl;
return 0;
}