以下是 从 内向外的模拟,就是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; }