日期:2014-05-20  浏览次数:20892 次

面试题 打印方阵5*5
1     2     3     4   5
        16   17   18   19   6
        15   24   25   20   7
        14   23   22   21   8
        13   12   11   10   9
用java如何实现啊????       希望大家帮忙,谢谢了!!!!!
这样写那里不对?????
import   java.util.Scanner;
public   class   Test55fangzhen   {


public   static   void   main(String[]   args)   {

        int[][]   a=new   int[5][5];
        int   i,j,k=0,m,n;
        Scanner   in=new   Scanner(System.in   );
        System.out.println( "name ");
          n=in.nextInt();
        if(n%2==0)m=n/2;
        else     m=n/2+1   ;
        for(i=0;i <m;i++){
        for(j=i;j <n;j++){k++;a[i][j]=k;}
        for(j=i+1;j <n-i;j++){k++;a[i][j]=k;}
        for(j=n-i-2;j> =i;j--){k++;a[n-i-1][j]=k;}
        for(j=n-i-2;j> =i;j--){k++;a[j][i]=k;}
        }
              for(i=0;i <a.length;i++)
              {   for(j=0;j <a[1].length;j++)
              System.out.print( "\t "+a[i][j]);
              System.out   .println();
              }  
}

}

------解决方案--------------------
http://community.csdn.net/Expert/TopicView3.asp?id=5323590


呵呵,好象很多人问这类问题.

还有for循环尽量少套几层,
想别的办法代替,
要不容易出现溢出问题.
:)
------解决方案--------------------
public class Turner {
public final int right=1;
public final int down=2;
public final int left=3;
public final int up=4;
public void printSnake(int n,int type) {
int legs=(int) Math.sqrt(n);
int[][] snake=new int[legs][legs];
for(int j=0; j <legs; j++)
for(int k=0; k <legs; k++)
snake[j][k]=0;
int i=0;
int direct=0;
int x=0;
int y=0;
if(type==1)
direct=right;
else
direct=down;
while(i <n) {
i++;
snake[y][x]=i;
if(type==1) {
if((direct==right && x==legs-1) ||(direct==right && snake[y][x+1]> 0))
direct=down;
if((direct==down && y==legs-1) || (direct==down && snake[y+1][x]> 0))
direct=left;
if((direct==left && x==0) || (direct==left && snake[y][x-1]> 0))
direct=up;
if((direct==up && y==0) || (direct==up && snake[y-1][x]> 0))
direct=right;
} else {
if((direct==right && x==legs-1) ||(direct==right && snake[y][x+1]> 0))
direct=up;
if((direct==down && y==legs-1) || (direct==down && snake[y+1][x]> 0))
direct=right;
if((direct==left && x==0) || (direct==left && snake[y][x-1]> 0))
direct=down;
if((direct==up && y==0) || (direct==up && snake[y-1][x]> 0))