现在的位置: 首页 > 综合 > 正文

将从1到n*n的n的平方个数,按顺时针方向从小到大排列成阵列

2014年08月25日 ⁄ 综合 ⁄ 共 926字 ⁄ 字号 评论关闭

将从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;


}

抱歉!评论已关闭.