可以用数组。如上例16应存放在value[1][0]中。
寻找规律,用规律来安排每一个数应存放在那儿,然后输出数组。

解决方案 »

  1.   

    因为16是第二行,第一列呀,所以当然存放在value[1][0]
      

  2.   

    int[] array=new [n+2][n+2];
    for (int i=0;i<n+2;i++){//填出一圈边框,为以后判定提供便利
      for (int j=0;j<n+2;j++){
        array[i][j]=-1;
      }
    }
    for (int i=1;i<n+1;i++){
      for (int j=1;j<n+1;j++){
        array[i][j]=0;
      }
    }
    int x=0;int y=0;
    int x1=x;int y1=y;
    int[] dxa={1,0,-1,0};int[] dya={0,1,0,-1};//表示方向
    int d=0;
    for (int i=1;i<=n*n;i++){
      array[x][y]=i;
      x+=dxa[d];y+=dya[d];
      if(array[x1][y1]!=0){
        x-=dxa[d];y-=dya[d];
        d=(d+1)%4;
        x+=dxa[d];y+=dya[d];
      }
    }
      

  3.   

    我随手写的,没有调试,估计没有问题。还要不要更详细的注释?主要思想是,先填一个数i,然后往前跑,如果碰到边界就回去,换个方向跑。由于本题的特点,只要换下个方向就肯定是空的。当然,有那种无路可走的情况,但是那个时候已经到顶了,i==n*n