首页 > 解决方案 > 用于构建以下方阵的 Java 函数

问题描述

我需要一个构建以下矩阵的函数,以 (int n) 作为函数参数:

链接到矩阵图像

在文字中,

1, 6, 14, 20, 24, 
10, 2, 7, 15, 21, 
17, 11, 3, 8, 16, 
22, 18, 12, 4, 9, 
25, 23, 19, 13, 5

所需代码:

static void Print(int n)
{
    int[][] matrix= new int[n][n];
    int i,j;

    // Help needed here to build the matrix e.g. for(i=0;i<n*n;i++) {…}

    //To print it
    for (i=0; i<n; i++)
    {
        for(j=0; j<n; j++)
        System.out.print(matrix[i][j]+" ");
        System.out.println();
    }
}

链接到矩阵逻辑: Logic

到目前为止我所做的尝试:我也尝试过使用 10 个标志和 int 变量以另一种方式进行操作,但没有成功。最干净的尝试是这样的:

class DP
{
    static void Print(int n)
    {
        int[][] matrix= new int[n][n];
        int i,j,x=0;
        for(i=0;i<matrix.length;i++)
        {
            boolean flag= false;
            for(j=0;j<matrix.length;j++)
            {
                if (flag) { x++; matrix[i][j]=x;}
                if (!flag) 
                {x=Math.abs(i - j) + 1; matrix[i][j] = x; flag=true;}
            }
        }
        for (i=0; i<n; i++)
        {
            for(j=0; j<n; j++)
            System.out.print(matrix[i][j]+" ");
            System.out.println();
        }
    }
    public static void main (String[] args)
    {
         int n=4;
         Print();
}

标签: javaarraysmatrixmultidimensional-array

解决方案


public class Main {

  public static void makeMatrix(int n){

    int[][] matrix = new int[n][n];
    int i,j;

    int x=0, y=0, flipX=0, flipY=0;

    for (int k=0;k<n*n;k++){

      if (x >= n){
        y = ++flipX;
        x = 0;
      }
      else if (y >= n){
        x = ++flipY;
        y = 0;
      }

      matrix[x++][y++] = k+1;
    }

    //To print it
    int sizeOfMaxDigit = String.valueOf(n * n).length();
    for (i=0; i<n; i++) {
      for(j=0; j<n; j++) {
        System.out.printf("%" + sizeOfMaxDigit + "d ", matrix[i][j]);
      }
      System.out.println();
    }

  }

  public static void main(String[] args){

    makeMatrix(1);
    System.out.println();
    makeMatrix(2);
    System.out.println();
    makeMatrix(3);
    System.out.println();
    makeMatrix(4);
    System.out.println();
    makeMatrix(5);
    System.out.println();
    makeMatrix(6);
    System.out.println();
    makeMatrix(10);

  }

}

给我以下输出:

1 

1 3 
4 2 

1 4 8 
6 2 5 
9 7 3 

 1  5 11 15 
 8  2  6 12 
13  9  3  7 
16 14 10  4 

 1  6 14 20 24 
10  2  7 15 21 
17 11  3  8 16 
22 18 12  4  9 
25 23 19 13  5 

 1  7 17 25 31 35 
12  2  8 18 26 32 
21 13  3  9 19 27 
28 22 14  4 10 20 
33 29 23 15  5 11 
36 34 30 24 16  6 

  1  11  29  45  59  71  81  89  95  99 
 20   2  12  30  46  60  72  82  90  96 
 37  21   3  13  31  47  61  73  83  91 
 52  38  22   4  14  32  48  62  74  84 
 65  53  39  23   5  15  33  49  63  75 
 76  66  54  40  24   6  16  34  50  64 
 85  77  67  55  41  25   7  17  35  51 
 92  86  78  68  56  42  26   8  18  36 
 97  93  87  79  69  57  43  27   9  19 
100  98  94  88  80  70  58  44  28  10 

由于这个问题在我看来就像一个家庭作业,为了您的调试乐趣,我会不评论解决方案,看看它是如何工作的。


推荐阅读