将从1到n*n的n的平方个数,按顺时针方向从小到大排列成阵列,怎么做?
如n=4则效果图:
1, 2, 3,4
12,13,14,5
11,16,15,6
10,9, 8, 7
#include <stdio.h> #include <math.h> int n=4; int a[4][4]; int getlevel(int n) { double n1=n; double level1=sqrt(n1); int levle=(int)ceil(level1); return levle; } void print(int n) { int k3=0,level; int totallevel; totallevel=getlevel(n); for( level=1;level<=totallevel;level++) { int i; for ( i=0;i<n-level;i++) //向右扫描 { a[level-1][i+level-1]=k3+1; } int k=a[level-1][i+level-2]; //记录右上角的值 int j; for(j=1;j<n-level;j++) //向下扫描 { int count=0; a[j][n-level]=k+count; count++; } int k1= a[j-1][n-level]; //记录右下角的值 int m; for( m=n-level-1;m>=0;i--) //向左扫描 { int count=0; a[n-level][m]=k1+count; count++; } int k2=a[n-level][m-1]; //记录左下角的值 int q; for(q=n-level;i>0;i--) //向上扫描 { int count=0; a[q][level-1]=k2+count; count++; } int k3=a[q-1][level-1]; //记录左上角的拐点值 }//for(levle) } int main() { int n,i,j; printf("请输入阵列的值n= "); //scanf("%d",&n); print(n); for(i=0;i<n;i++) { for( j=0;j<n;j++) { printf("%d",a[i][j]); if (j==n-1) printf("\n"); } } return 0; }