仅供娱乐    int i=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  
      
    int i=6 ;//打印出下面图形    1  2  3  4  5   6  
    20 21 22 23 24  7  
    19 32 33 34 25  8  
    18 31 36 35 26  9  
    17 30 29 28 27 10  
    16 15 14 13 12 11  

解决方案 »

  1.   

    温州动车相撞,在于程序出了BUG,现在已经拘补2名无证程序员
      

  2.   

    应该没错了吧public static void main(String[] args) throws ClassNotFoundException {
    int num = 5;
    int[][] b = getS(num);
    for(int i=0;i<num;i++){
    for(int j=0;j<num;j++){
    System.out.println("b["+i+"]["+j+"] = "+b[i][j]);
    }
    }
    }
    public static int[][] getS(int num){
    int[][] intA = new int[num][num];
    int n = 0;
    if(num%2!=0){
    intA[num/2][num/2] = num * num ;
    }
    int k=1;
    for(int i=0;i<num/2;i++){
    int m = 0;
    while(m!=4){
    if(m == 0){
    for(int j = i;j<num-1-i;j++){
    intA[i][j] = k;
    k++;
    }
    }
    if(m == 1){
    for(int j = i;j<num-1-i;j++){
    intA[j][num-1-i] = k;
    k++;
    }
    }
    if(m == 2){
    for(int j = num-1-i;j>i;j--){
    intA[num-1-i][j] = k;
    k++;
    }
    }
    if(m == 3){
    for(int j = num-1-i;j>i;j--){
    intA[j][i] = k;
    k++;
    }
    }
    m = m + 1 ;
    }
    }
    return intA;
    }
      

  3.   

    按打印顺序来输出
    public static void main(String[] args) throws ClassNotFoundException {
    int num = 6;
    int[][] b = getS(num);
    for(int i=0;i<num;i++){
    for(int j=0;j<num;j++){
    System.out.print(b[i][j]+" ");
    }
    System.out.println();
    }
    }
      

  4.   


    public static void main(String   args[]){
            setValue(20,20);
        }
     
        public static void setValue(int width,int height){      
            int nums[][] = new int[width][height];
            int direction = 0;// 0:右  1:下 2:左 3:上
            int ind_x = 0;
            int ind_y = 0;        for (int i = 0; i < width * height; i++) {
                nums[ind_x][ind_y] = i + 1;
                int []p = getFuturePos(direction,ind_x,ind_y);
                if(p[0] < 0 || p[0] >= width || p[1] < 0 || p[1] >= height || nums[p[0]][p[1]] != 0){
                    ++ direction;
                    p = getFuturePos(direction,ind_x,ind_y);
                }
                ind_x = p[0];    
                ind_y = p[1];
            }
        
            for (int i = 0; i < nums[0].length; i++) {
                for (int j = 0; j < nums[1].length; j++) {
                    System.out.print(nums[i][j] + "\t");
                }
                System.out.println();
            }
        }
        
        public static int[] getFuturePos(int direction ,int x ,int y){
            int []p = new int[2];
            p[0] = x;
            p[1] = y;
            switch(direction % 4){
                case 2: //左
                    --p[1] ;
                    break;
                case 3://上
                    --p[0];
                    break;
                case 1: //下
                    ++p[0];
                    break;
                case 0: //右
                    ++p[1];
                    break;
            }
            return p;
        }
      

  5.   

    我也上一段codepublic class Matrix {
    int[][] myMatrix; public Matrix(int n) {
    myMatrix = new int[n][n]; for (int i = 0; i < n; i++) {
    for (int j = 0; j < n; j++) {
    myMatrix[i][j] = 0;
    }
    }
    } static void print(int[][] matrix) {
    for (int i = 0; i < matrix.length; i++) {
    for (int j = 0; j < matrix.length; j++) {
    if (matrix[i][j] < 10)
    System.out.print("0" + matrix[i][j] + " ");
    else
    System.out.print(matrix[i][j] + " ");
    }
    System.out.println();
    }
    } public void fun(int size) {
    int[] flag = new int[] { 0, 1, 2, 3 };//右,下,左,上
    int total = size * size;
    int n = 1;
    int width = size - 1,height = size - 1;//当前需要填充矩阵的宽,高
    int startW = 0,startH = 0;//当前需要填充矩阵的起始宽,高
    int now = 0;//方向指示标志
    while (n <= total) {
    switch (flag[now % flag.length]) {
    case 0:
    for(int i = startW,j = startW;j <= width;j++)
    myMatrix[i][j] = n++;
    startH++;
    break;
    case 1:
    for(int i = startH,j = height;i <= height;i++)
    myMatrix[i][j] = n++;
    width--;
    break;
    case 2:
    for(int i = height,j = width;j >= startW;j--)
    myMatrix[i][j] = n++;
    height--;
    break;
    case 3:
    for(int i = height,j = startW;i >= startH;i--)
    myMatrix[i][j] = n++;
    startW++;
    break;
    }
    now++;
    }
    }

    public static void main(String[] args) {
    Matrix matrix = new Matrix(5);
    matrix.fun(5);
    print(matrix.myMatrix);
    System.out.println();
    matrix = new Matrix(6);
    matrix.fun(6);
    print(matrix.myMatrix);
    }
    }
      

  6.   

    凑热闹class Matrix {
        public static void main(String[] args) {
            matrix(5);
            System.out.println();
            matrix(6);
        }    public static void matrix(int n) {
            if (n < 1) {return;}
            int[][] m = new int[n][n];
            for (int i=0, r=0, c=0, rb=n, cb=n, rf=0, cf=1; i<n*n; i++) {
                m[r][c] = i+1;            c += cf;
                r += rf;            if (c==cb-1 && cf==1) { /* 横向控制(右边界) */
                    cf = 0;
                    rf = 1;
                } else if (c==n-cb && cf==-1) { /* 左边界 */
                    cb--;
                    cf = 0;
                    rf = -1;
                }            if (r==rb-1 && rf==1) { /* 纵向控制 (下边界)*/
                    rf = 0;
                    cf = -1;
                } else if (r==n-rb && rf==-1) { /* 上边界 */
                    rb--;
                    rf = 0;
                    cf = 1;
                    r++;
                    c++;
                }
            }        for (int i=0; i<n; i++) { /* 结果打印 */
                for (int j=0; j<n-1; j++) {
                    System.out.printf("%2d ", m[i][j]);
                }
                System.out.printf("%2d\n", m[i][n-1]);
            }
        }
    }
      

  7.   


    import java.io.Reader;
    import java.util.Scanner;public class MonkeyAndPeach {
        public static int dimension = 0;//输出数组的维数
        public static int a[][] = null;//存放输出数组
        public static int step = 1;//起始数字为1
        public static int level = 0;//最外层为第0层    public static void main(String[] args) {
    Scanner reader = new Scanner(System.in);
    System.out.println("please input one integer:");
    dimension = reader.nextInt();
    init();
    while (level < dimension - level - 1)// 从最外层开始由外到里逐层遍历
        traverse(level++);
    if (level == dimension - level - 1) {// 当维数为奇数时,有一个中心点,此时直接赋值
        a[level][level] = step;
    }
    output();
        }    public static void init() {
    a = new int[dimension][dimension];
        }    public static void output() {
    for (int i = 0; i < dimension; i++) {
        for (int j = 0; j < dimension; j++) {
    System.out.print(a[i][j] + "       ");
        }
        System.out.println();
        System.out.println();
    }
        }    public static void traverse(int level) {
    for (int i = level; i < dimension - level - 1; i++) 
        a[level][i] = step++;
    for (int i = level; i < dimension - level - 1; i++)
        a[i][dimension - level - 1] = step++;
    for (int i = level; i < dimension - level - 1; i++)
        a[dimension - level - 1][dimension - i - 1] = step++;
    for (int i = level; i < dimension - level - 1; i++)
        a[dimension - i - 1][level] = step++;
        }}
      

  8.   

    还是写一个凑热闹:
    public class RollingMatrix {
    public static int[][] rolling(int[][] is, int depth, int x) {
    int n = is.length-2*depth;
    if (n<=0) return is;
    for (int i=depth; i<depth+n; i++) is[depth][i] = x++;
    for (int i=depth+1; i<depth+n-1; i++) is[i][depth+n-1] = x++;
    for (int i=depth+n-1; i>depth; i--) is[depth+n-1][i] = x++;
    for (int i=depth+n-1; i>depth; i--) is[i][depth] = x++;
    return rolling(is, depth+1, x);
    }
    public static void main(String[] args) {
    int[][] is = rolling(new int[4][4], 0, 1);
    for (int i=0; i<is.length; i++) 
    for (int j=0; j<is.length; j++) System.out.print(is[i][j] + (j==is.length-1?"\r\n":" "));
    }
    }
      

  9.   

    也写了一个。。但是自己的算法看起来比较笨。
    private void houzitoutao(int h) {
    // TODO Auto-generated method stub
     int value=1;
     int quanshu=(h+1)/2;
     int ai=0,aj=0;
     int shouhang=h;
     
     int [][]a=new int[h][h];
     for(int i=0;i<h;i++){
     for(int j=0;j<h;j++){
     a[i][j]=0;
     } 
     }
     
     
    out:  for(int q=1;q<=quanshu;q++){
     
     
     //上
     for(int i=1;i<=shouhang;i++){
     a[ai][aj]=value;
     
     if(value==h*h) break out;
     
     aj++;
     value++;
     }
     ai=ai+1;
     aj--;
     //右
     for(int i=1;i<=shouhang-1;i++){
     a[ai][aj]=value;
     ai++;
     value++;
     
     }
     aj=aj-1;
     ai--;
     //下
     for(int i=1;i<=shouhang-1;i++){
     a[ai][aj]=value;
     if(value==h*h) break out;
     aj--;
     value++;
     }
     aj++;
     ai--;
     
     //左
     for(int i=1;i<=shouhang-2;i++){
     a[ai][aj]=value;
     ai--;
     value++;
     
     }
     ai++;
     aj++;
     

     //最后
     shouhang=shouhang-2;
       }
     
     
     for(int i=0;i<h;i++){
     for(int j=0;j<h;j++){
     
     System.out.print(String.format("%5d", a[i][j]));
     }
     System.out.println();
     System.out.println();
     
     }
     
     }
     
      

  10.   


    public static void main(String[] args) {
    int size = 10; int[][] arr = new int[size][size];

    int num = 1;
    int maxnum = size * size;

    int min = 0;
    int max = size - 1; int x = 0;
    int y = 0; while (num < maxnum) {
    //上
    for (; y < max; y++) {
    arr[x][y] = num++;
    } //右
    for (; x < max; x++) {
    arr[x][y] = num++;
    } //下
    for (; y > min; y--) {
    arr[x][y] = num++;
    } //左
    for (; x > min; x--) {
    arr[x][y] = num++;
    }

    x++;
    y++;

    max--;
    min++;
    }
    for (int i = 0; i < size; i++) {
    for (int j = 0; j < size; j++) {
    System.out.printf("%4d ", arr[i][j]);
    }
    System.out.print("\r\n");
    }
    }我也来一段
      

  11.   

    public static void main(String[] args) {
    int size = 8; int[][] arr = new int[size][size]; int num = 1;
    int maxnum = size * size; int min = 0;
    int max = size - 1; int x = 0;
    int y = 0; while (num < maxnum) {
    // 上
    for (; y < max; y++) {
    arr[x][y] = num++;
    } // 右
    for (; x < max; x++) {
    arr[x][y] = num++;
    } // 下
    for (; y > min; y--) {
    arr[x][y] = num++;
    } // 左
    for (; x > min; x--) {
    arr[x][y] = num++;
    } x++;
    y++; max--;
    min++;
    } //恰好位于正方形中心时
    if (x == y && max == min && x == max) {
    arr[x][y] = maxnum;
    } for (int i = 0; i < size; i++) {
    for (int j = 0; j < size; j++) {
    System.out.printf("%4d ", arr[i][j]);
    }
    System.out.print("\r\n");
    }
    }
      

  12.   

    对了 我记得当初还有一个童鞋用的移位做的 貌似叫joejoe...很久不见他了 
      

  13.   

    #include<iostream.h>void main()
    {
    int num;
    cout<<"请输入图形行数:";
    cin>>num;
    int **M=new int*[num];//申请数组空间
    for(int i=0;i<num;i++)//申请数组空间
    M[i]=new int[num];
    for(i=0;i<num;i++)//全部清零,为下一步做准备
    for(int j=0;j<num;j++)
    M[i][j]=0;
    int di=1;//方向
    int j;
    i=j=0;
    for(int tmp=0;tmp<num*num;tmp++)
    {
    M[i][j]=tmp+1;

    switch(di)//向前探测道路是否可行,不可行则变向
    {
    case 1:
    if((j+1)>=num||(M[i][j+1]!=0)) di=2;break;
    case 2:
    if((i+1)>=num||(M[i+1][j]!=0)) di=3;break;
    case 3:
    if((j-1)<0||(M[i][j-1]!=0)) di=4;break;
    case 4:
    if((i-1)<0||(M[i-1][j]!=0)) di=1;break;
    }

    switch(di)//经上一步探测,向前走一步
    {
    case 1:
    j++;break;
    case 2:
    i++;break;
    case 3:
    j--;break;
    case 4:
    i--;break;
    }

    }
    for(i=0;i<num;i++)//打印图形
    {
    for(j=0;j<num;j++)
    cout<<M[i][j]<<'\t';
    cout<<endl;
    }
    }
    //很久之前写的
      

  14.   


    #include <iostream>
    using namespace std;
    #define MAX 100;
    enum DIRECTION{LEFT,RIGHT,UP,DOWN};
    int main(){
    int N;
    int arr[100][100];
    int i=0,j=0;
    int x=0,y=0;
    DIRECTION direction=RIGHT;
    cout<<"请输入一个整数:";
    cin>>N;
    //初始化边界
    for(i=0;i<N;++i){
    for(j=0;j<N;j++) arr[i][j]=0;
    }
    arr[0][0]=1;
    for(i=0;i<=N*N-1;){
    arr[x][y]=++i;
    switch(direction){
    case RIGHT://当向右移时
    if(x<N-1&&arr[x+1][y]==0) {
    x++;
    break;}
    else{
    direction=DOWN;
    y++;
    break;}
    case DOWN://向下移时
    if(y<N-1&&arr[x][y+1]==0) {
    y++;
    break;}
    else{
    direction=LEFT;
    x--;
    break;}
    case LEFT://向左移时
    if(x>0&&arr[x-1][y]==0){
    x--;
    break;}
    else{
    direction=UP;
    y--;
    break;}
    case UP://向上移动时
    if(y>0&&arr[x][y-1]==0) {
    y--;
    break;}
    else{
    direction=RIGHT;
    x++;
    break;}
    } }
    //输出数组
    cout<<"\n"<<N<<"\n";
    for(i=0;i<N;i++){
    cout<<"\n";
    for(j=0;j<N;j++) cout<<arr[j][i]<<"      ";
    }
    return 0;
    }
      

  15.   


       
     public static void main(String[] args)
       {
       int i, j;
       int[][] array = new int[7][7];
       int k = 1;
       int n = 7;  // 螺旋数长度  可以执行自己输入长度
       for(i = 0; i < (n / 2); i++)
       {
       for(j = i; j < n - 1 - i; j++) // 上侧
       {
       array[i][j] = k;
       k++;
       }
       for(j = i; j < n -1 - i; j++)  // 右侧
       {
       array[j][n - 1 - i] = k;
       k++;
       
       }
       for(j = n - 1 - i; j > i; j--) //下侧
       {
       array[n - 1 - i][j] = k;
       k++;
       }
       
       for(j = n - 1 - i; j > i; j--) //左侧
       {
       array[j][i] = k;
       k++;
       }
       }
       if(n % 2 == 1)  // 奇数是中间的一个数
    {
    i = (n) / 2;
    array[i][i] = n * n;
    }
       
       for(i = 0; i < n; i++)
       {
       for(j = 0; j < n; j++)
       {
       System.out.print(array[i][j] + " ");
       }
       System.out.println();
       }
       }