将从1到n*n的n的平方个数,按顺时针方向从小到大排列成阵列,怎么做?
如n=4则效果图:
1, 2, 3,4
12,13,14,5
11,16,15,6
如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;
}