从键盘输入一个整数(1~20)
则以该数字为矩阵的大小,把1,2,3…n*n 的数字按照顺时针螺旋的形式填入其中。例如:
输入数字2,则程序输出:
1 2
4 3
输入数字3,则程序输出:
1 2 3
8 9 4
7 6 5
输入数字4, 则程序输出:
1  2   3   4
12  13  14  5
11  16  15  6
10   9  8   7
这个程序怎么写呀?请各位帮忙写一下!

解决方案 »

  1.   

    一模一样的问题就不要重复发帖了!
    http://topic.csdn.net/u/20110428/12/e6942638-849e-4bcc-a576-a2fa818c09f0.html
      

  2.   

    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;public class BBB {
     public static int d;
    public static void main(String[] args) {
    BBB l=new BBB();
    System.out.println("请输入一个数:");
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    try {
    String str = br.readLine();
    d= Integer.parseInt(str);} catch (NumberFormatException e) {
    e.printStackTrace();
    } catch (IOException e) {
    e.printStackTrace();
    }
    int [][]a=new int [d][d];  
    System.out.println("排列:");
    int n=0;
    boolean flay=true;
    while(flay&&n<d)
    {
    for(int i=n;i<d-n;i++)
    if(n==0)
    a[n][i]=i+1;
    else
    a[n][i]=a[n][i-1]+1;
    flay=l.Chu(a);
    if(flay==false) break;
    for(int i=n;i<d-n-1;i++)
    if(n==0)
    a[i+1][d-1-n]=i+d+1;
    else
    a[i+1][d-1-n]=a[i][d-1-n]+1;
    for(int i=n;i<d-n-1;i++)
    if(n==0)
    a[d-1-n][i]=a[d-1-n][d-1-n]+d-1-i;
    else
    a[d-1-n][i]=a[d-1-n][d-1-n]+d-1-n-i;
    flay=l.Chu(a);
    if(flay==false) break;
    for(int i=1+n;i<d-n-1;i++)
    if(n==0)
    a[i][n]=a[d-1-n][n]+d-1-i;
    else
    a[i][n]=a[d-1-n][n]+d-1-i-n; 
    flay=l.Chu(a);
    n++;
    }
    l.OUT(a);
    }
    public void OUT(int [] []a)
    {
    for(int i=0;i<d;i++)
    {
    for(int j=0;j<d;j++)
    {
    System.out.print(a[i][j]+"\t");
    }
    System.out.println();
    }
    }
    public boolean Chu(int [] []a)
    {for(int i=0;i<d;i++)
    {
    for(int j=0;j<d;j++)
    {
    if(a[i][j]==0)
    return true;
    }
    }
    return false;
    }
    }
      

  3.   

    横排赋值  右竖赋值 下横赋值 左竖赋值 楼主可以按这个思路去实现,用四个while循环就能实现!!!
      

  4.   

    import java.util.Scanner;public class Test8 {
    public static void main(String[] args) {
    int num=1;
    int cirCle[][]=new int[20][20];
    int inputNum;
    int i,j,line,t;
    Scanner in=new Scanner(System.in);
    inputNum=in.nextInt();
    line=inputNum;

    for(t=0;t<line;t++){
    for(i=t,j=t;j<inputNum-t;j++){ //赋值上外围
    cirCle[i][j]=num;
    num++;
    }
    for(j=j-1,i=i+1;i<inputNum-t;i++){ //赋值右外围
    cirCle[i][j]=num;
    num++;
    }
    for(j=j-1,i=i-1;j>=t;j--){ //赋值下外围
    cirCle[i][j]=num;
    num++;
    }
    for(j=j+1,i=i-1;i>t;i--){ //赋值左外围
    cirCle[i][j]=num;
    num++;
    }

    }

    for(int m=0;m<line;m++){ //输出结果
    for(int n=0;n<line;n++){
    System.out.print(cirCle[m][n]+" ");
    }
    System.out.println();
    }
    }

    }
      

  5.   


    import java.util.*;public class Test
    {
    private final static int UP = 0;
    private final static int DOWN = 1;
    private final static int LEFT = 2;
    private final static int RIGHT = 3;

    public static int getLength(int num)
    {
    int i;
    for (i = 1; num != 0; i++)
    num /= 10;
    return i;
    }

    public static void main(String[] args)
    {
    Scanner in = new Scanner(System.in);
    int size = in.nextInt();

    int data[][] = new int[size][size];
    int toward = Test.RIGHT;
    for (int num = 1, i = 0, j = 0; num <= size * size; num++)
    {
    data[i][j] = num;
    switch (toward)
    {
    case UP: 
    if (i == 0 || data[i - 1][j] != 0)
    {
    toward = RIGHT;
    j++;
    }
    else
    i--;
    break;
    case DOWN:
    if (i == size - 1 || data[i + 1][j] != 0)
    {
    toward = LEFT;
    j--;
    }
    else
    i++;
    break;
    case LEFT:
    if (j == 0 || data[i][j - 1] != 0)
    {
    toward = UP;
    i--;
    }
    else
    j--;
    break;
    case RIGHT:
    if (j == size - 1 || data[i][j + 1] != 0)
    {
    toward = DOWN;
    i++;
    }
    else
    j++;
    break;
    }
    }

    int l = getLength(size * size);
    for (int i = 0; i < size; i++)
    {
    for (int j = 0; j < size; j++)
    {
    System.out.printf("%-" + l + "d", data[i][j]);
    }
    System.out.println();
    }
    }
    }
      

  6.   

    package test;public class Test {
        public static void main(String[] args) {
            final int count = 10;
            final int max = count * count;
            int[][] data = new int[count][count];
            int x = -1, y = 0, cur = 0;
            
            while (cur < max) {
                for (; x + 1 < count && data[x + 1][y] == 0; data[y][++x] = ++cur);
                for (; y + 1 < count && data[x][y + 1] == 0; data[++y][x] = ++cur);
                for (; x - 1 >= 0 && data[y][x - 1] == 0; data[y][--x] = ++cur);
                for (; y - 1 >= 0 && data[y - 1][x] == 0; data[--y][x] = ++cur);
            }        for (int i = 0; i < count; ++i) {
                for (int j = 0; j < data[i].length; ++j) {
                    System.out.printf("%-3d ", data[i][j]);
                }
                System.out.println();
            }
        }
    }
      

  7.   

    import java.util.*;public class luoxuan {
        public static void main(String[] args) {
           Scanner sc=new Scanner(System.in);
           System.out.println("请输入一个正整数:");
           
           int n=sc.nextInt();  //从 System.in 中读取一个数
           int i=1,j=0,k=0,flag=0,sign=0;
           int[][] arry=new int[n][n];       for(i=1;i<=n*n;){
               for(k=0+flag;k<n-flag;k++){
                  arry[j+sign][k]=i++;
               }
               for(j=1+flag;j<n-flag;j++){
                  arry[j][k-1]=i++;
               }
               for(k=k-2;k>=0+flag;k--){
                  arry[j-1][k]=i++;
               }
               for(j=j-2;j>=1+flag;j--){
                  arry[j][k+1]=i++;
               }
               flag++;
               sign=1;
           }
           for(i=0;i<n;i++){
               for(j=0;j<n;j++)
                  System.out.print(arry[i][j]+" ");
               System.out.println();
           }          
        }
    }一样国信蓝点杯。一起加油啊。