3样例输出7 8 16 9 25 4 3#include <stdio.h>int main(){ int n,i,j,y,z,m,a,b,x=1; scanf("%d",&n); int Sz[n][n]; if(n%2!=0)//如果是奇数方阵,就率先赋值中心下标数组值 Sz[n/2][n/2]=n*n; a=0;b=n-1;y=n-1,z=n-1; m=n/2; while(m--){ //0~m-1,m表示遍历的圈数 i=a;j=b; for(;i<y;i++,x++){ //z表示遍历每圈需要遍历的行or列数;i,j表示每圈最右上角数组下标 Sz[i][j] = x; Sz[j][n-1-i] = x+z; Sz[n-1-i][j-z] = x+2*z; Sz[j-z][i] = x+3*z; } a++; b--; x+=3*z; //x表示每圈最右上角的真值 y--; //y--因为有i++,相当于范围-=2; z-=2; } for(i=0;i<n;i++){ for(j=0;j<n;j++) PRintf("%d ",Sz[i][j]);//printf("%-4d",Sz[i][j]); printf("/n"); } return 0;}
新闻热点
疑难解答