4  4  4  4  4  4  4
4  3  3  3  3  3  4
4  3  2  2  2  3  4
4  3  2  1  2  3  4 
4  3  2  2  2  3  4
4  3  3  3  3  3  4
4  4  4  4  4  4  4
求一个解决方案的详细代码

解决方案 »

  1.   


    import java.util.Scanner;
    public class Test2 {
        public static void main(String[] args) {
            System.out.print("请输入矩阵的阶数:");
            Scanner sc = new Scanner(System.in);
            int m = sc.nextInt(), n = 2 * m - 1;
            int[][] data = new int[n + 1][n + 1];
            int x = 1, y = n;
            for (int k = m; k >= 1; k--) {
                for (int j = x; j <= n - x + 1; j++) {
                    data[x][j] = k;
                    data[y][j] = k;
                    data[j][x] = k;
                    data[j][y] = k;
                }
                x++;
                y--;
            }
            for (int i = 1; i <= n; i++) {
                for (int j = 1; j <= n; j++) {
                    System.out.print(data[i][j]+" ");
                }
                System.out.println();
            }
        }
    }
    运行结果:
    请输入矩阵的阶数:4
    4 4 4 4 4 4 4 
    4 3 3 3 3 3 4 
    4 3 2 2 2 3 4 
    4 3 2 1 2 3 4 
    4 3 2 2 2 3 4 
    4 3 3 3 3 3 4 
    4 4 4 4 4 4 4 
      

  2.   

    int idx = 4; //最外圍數字
    int shiftIdx = idx -1; //中心為0比較容易計算
    //讓中心點為座標的 0,0
       for(int i=-shiftIdx;i<=shiftIdx;i++){
            for(int j=-shiftIdx;j<=shiftIdx;j++){
                //因為最上面減一,所以這裡加一
                System.out.print(Math.max(Math.abs(i),Math.abs(j))+1);
            }
            System.out.println();
        }
      

  3.   

    参考下吧……
    #include <stdio.h>
    #define Max 9    //定义上限
    void main()

        int a[Max][Max]={0};
        int i,j,n,k=1;
        printf("输入一个奇数(3~9) :");
        scanf("%d",&n);
        i=0;j=n/2;
        a[i][j]=k;   
        while(1)     
        {
            k++;
            i=i-1;
            j=j+1;
            if(i<0) i=n-1;
            if(j==n) j=0;
            if(a[i][j]!=0)
            {
                i=i+1;
                a[i][j]=k;
            }
            else a[i][j]=k;
            if(k==n*n)
                break;
        }
        for(i=0;i<n;i++)
        {
            for(j=0;j<n;j++)
                printf("%d\t",a[i][j]);
            printf("\n");
        }
        printf("\n");
    }
      

  4.   

    另外一种思路,按横纵向离中心点远的坐标算步长。
    照搬了1搂不少代码~谢谢咯  public static void main(String[] _s) {
        System.out.print("请输入矩阵的阶数:");
        Scanner sc = new Scanner(System.in);
        int m = sc.nextInt(), n = 2 * m - 1;
        int[][] data = new int[n + 1][n + 1];    for (int i = 1; i <= n; i++) {
          for (int j = 1; j <= n; j++) {
            int k = (j - m) * (j - m) - (i - m) * (i - m) > 0 ? j : i;
            data[i][j] = (k - m) > 0 ? k - m + 1 : m - k + 1;
          }
        }    for (int i = 1; i <= n; i++) {
          for (int j = 1; j <= n; j++) {
            System.out.print(data[i][j] + " ");
          }
          System.out.println();
        }
      }
      

  5.   

    import java.util.*;
    public class Cube
    {
        public static void main(String[] args)
        {
            System.out.print("请输入矩阵的阶数:");
            Scanner sc = new Scanner(System.in);
            int m = sc.nextInt(), n = 2 * m - 1;
            int t=m;
            int[][] data = new int[n][n];
            for(int k =0;k<n; k++) {
                for (int j = k; j <n - k; j++) {
                    data[k][j] = t;
                    data[j][k] = t;
                    data[n-k-1][j] = t;
                    data[j][n-k-1] = t;
                }
                t--;
            }
            for (int i = 0; i <n; i++) {
                for (int j = 0; j < n; j++) {
                    System.out.print(data[i][j]+" ");
                }
                System.out.println();
            }
        }
    }