import java.util.*;
import java.io.*;
public class huixuan{
     public static void main(String[] arg) throws NumberFormatException, IOException
     {
         System.out.println("请输入N:");
         BufferedReader read = new BufferedReader(new InputStreamReader(System.in));
         int x = Integer.parseInt(read.readLine());
          int count = (x / 2) + 1;
          int k = x;
          int[][] a = new int[k][k];
          for( int i = 1; i <= count; i++ )
          {
               for( int n = i - 1; n <= k - i; n++ )
               {
                    if( i == 1 && n == 0 )
                        a[i-1][n] = 1;
                    else
                       a[i-1][n] = a[i-1][n-1] + 1;
               }               for( int n = i; n <= k - i; n++ )
               {
                    a[n][k-i] = a[n-1][k-i] + 1;
               }               for( int n = k - i - 1; n >= i - 1; n-- )
               {
                    a[k-i][n] = a[k-i][n+1] + 1;
               }               for( int n = k - i - 1; n >= i; n-- )
               {
                    a[n][i-1] = a[n+1][i-1] + 1;
               }
          }
          for( int i = 0; i < k; i++ )
          {
             for( int j = 0; j < k; j++ )
                {
                    if( a[i][j] <= 9 )
                      {
                        System.out.print("  "+a[i][j]);
                      }
                else
                    System.out.print(" "+a[i][j]);
                }
             System.out.println();
          }
     }
}

解决方案 »

  1.   


    package com.walkman.test;import java.io.*;
    /**
     * 
     * @author: yanzhne
     * @date: 2012-3-7
     */
    public class Test {
    public static void main(String args[]) {
    System.out.println("请输入N:");
    BufferedReader read = new BufferedReader(new InputStreamReader(
    System.in));
    int x = 0;
    try {
    x = Integer.parseInt(read.readLine());
    } catch (NumberFormatException e) {
    e.printStackTrace();
    } catch (IOException e) {
    e.printStackTrace();
    }
    int count = (x / 2) + 1; // 矩阵的中间数
    int k = x;
    int[][] a = new int[k][k];
    // 构建一个回旋矩阵
    for (int i = 1; i <= count; i++) {
    // 输出第一个回旋的前四个数字,第一次设定1,2,3,4(5行/列矩阵为例)
    for (int n = i - 1; n <= k - i; n++) {
    if (i == 1 && n == 0)
    a[i - 1][n] = 1;
    else
    a[i - 1][n] = a[i - 1][n - 1] + 1;
    } // 输出第一个回旋的右侧数列,第一次设定为5,6,7,8
    for (int n = i; n <= k - i; n++) {
    a[n][k - i] = a[n - 1][k - i] + 1;
    } // 输出第一个回旋的底部数列,第一次设定为9,10,11,12
    for (int n = k - i - 1; n >= i - 1; n--) {
    a[k - i][n] = a[k - i][n + 1] + 1;
    } // 输出第一个回旋的左侧数列,第一次设定为13,14,15,16
    for (int n = k - i - 1; n >= i; n--) {
    a[n][i - 1] = a[n + 1][i - 1] + 1;
    }
    }

    // 输出回旋矩阵
    for (int i = 0; i < k; i++) {
    for (int j = 0; j < k; j++) {
    if (a[i][j] <= 9) {
    System.out.print(" " + a[i][j]);
    } else
    System.out.print(" " + a[i][j]);
    }
    System.out.println();
    }
    }}这种复杂的程序可以分解循环,从循环体的第一个数字开始计算,虽说麻烦点,也没有更好的方法。
    一个练脑子的程序,当年就没想出方法来。写程序的人数学功底不错。