当前位置: 首页 > 知识库问答 >
问题:

用java打印螺旋矩阵

白信鸿
2023-03-14

我想用一个整数的方法打印一个螺旋矩阵。然而,我在纸上的代码运行得很好,但是当我运行时,我会得到不同的数字来代替我想要的数字。

public class ConstructSpiral{
    public static void main(String[] args) {

        constructSpiral(3);
    }

    public static int[][] constructSpiral(int n) {
        
        int[][] matrix = new  int[n][n];
        int sum = 0;
        int i = matrix.length - 1;
        int j = matrix[i].length - 1;
        
        for(j = matrix[i].length - 1; j >= 0; j--)
        {
            sum += sum + 1;
            matrix[i][j] = sum;
        }
        
        j = 0;
        for(i = (matrix.length - 1) - 1; i >= 0; i--) {
            sum += sum + 1;
            matrix[i][j] = sum;
        }

        i = 0;
        for(j = 1;  j < matrix.length; j++)
        {
            sum += sum + 1;
            matrix[i][j] = sum;
        }

        i = 1;
        for(j = 2; j <= i; j--){
            sum += sum + 1;
            matrix[i][j] = sum;
        }

        for(i = matrix.length - 1; i >= 0; i--) {
            for(j = matrix[i].length - 1; j >= 0; j--) 
            {
                System.out.print(matrix[i][j] + ", ");
            }
            System.out.println();
        }

        return matrix;

    }
}

在现实中,它应该打印如下内容

5 6 7
4 9 8
3 2 1

如果您能帮忙,我们将不胜感激。

共有1个答案

屈浩波
2023-03-14

我认为你是在正确的轨道上,你可能只是想利用构造Spiral方法的n参数多一点,以及将打印逻辑移动到不同的方法中:

import java.util.Scanner;

public class ConstructSpiral {

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.print("Enter value of n: ");
        int n = scanner.nextInt();
        int[][] spiral = constructSpiral(n);
        printSquareMatrix(spiral, n);
    }

    public static int[][] constructSpiral(int n) {
        int[][] matrix = new int[n][n];
        int r1 = 0, c1 = 0, r2 = n - 1, c2 = n - 1, sum = 1;
        int i = 0, j = 0;
        while (sum <= n * n) {
            for (j = c2; j >= c1; j--)
                matrix[r2][j] = sum++;
            r2--;
            for (i = r2; i >= r1; i--)
                matrix[i][c1] = sum++;
            c1++;
            for (j = c1; j <= c2; j++)
                matrix[r1][j] = sum++;
            r1++;
            for (i = r1; i <= r2; i++)
                matrix[i][c2] = sum++;
            c2--;
        }
        return matrix;
    }

    public static void printSquareMatrix(int[][] matrix, int n) {
        int padLength = String.valueOf(n * n).length() + 1;
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < n; j++) {
                System.out.printf("%1$-" + padLength + "s", matrix[i][j]);
            }
            System.out.println();
        }
    }

}

用法示例1:

Enter value of n: 3
5 6 7 
4 9 8 
3 2 1 

示例用法2:

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

示例用法3:

Enter value of n: 10
19  20  21  22  23  24  25  26  27  28  
18  51  52  53  54  55  56  57  58  29  
17  50  75  76  77  78  79  80  59  30  
16  49  74  91  92  93  94  81  60  31  
15  48  73  90  99  100 95  82  61  32  
14  47  72  89  98  97  96  83  62  33  
13  46  71  88  87  86  85  84  63  34  
12  45  70  69  68  67  66  65  64  35  
11  44  43  42  41  40  39  38  37  36  
10  9   8   7   6   5   4   3   2   1 
 类似资料:
  • 本文向大家介绍螺旋打印矩阵,包括了螺旋打印矩阵的使用技巧和注意事项,需要的朋友参考一下 该算法用于以螺旋方式打印数组元素。首先,从第一行开始,先打印全部内容,然后按照最后一列打印,然后再最后一行,依此类推,从而以螺旋方式打印元素。  该算法的时间复杂度为O(MN),M为行数,N为列数。 输入输出 算法 输入: 矩阵矩阵,行和列m和n。 输出:以螺旋方式打印矩阵的元素。 示例 输出结果

  • 本文向大家介绍Java编程实现打印螺旋矩阵实例代码,包括了Java编程实现打印螺旋矩阵实例代码的使用技巧和注意事项,需要的朋友参考一下 直接上代码吧。 昨晚腾讯在线测试遇到的题。 螺旋矩阵是指一个呈螺旋状的矩阵,它的数字由第一行开始到右边不断变大,向下变大,向左变大,向上变大,如此循环。 总结 以上就是本文关于Java编程实现打印螺旋矩阵实例代码的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续

  • 本文向大家介绍程序在python中以螺旋顺序打印矩阵元素,包括了程序在python中以螺旋顺序打印矩阵元素的使用技巧和注意事项,需要的朋友参考一下 假设我们有一个2D矩阵垫。我们必须以螺旋方式打印矩阵元素。首先,从第一行(mat [0,0])开始,先打印整个内容,然后再打印最后一列,然后再打印最后一行,依此类推,从而以螺旋方式打印元素。 所以,如果输入像 7 10 9 2 9 1 6 2 3 9

  • 给定一个包含 m x n 个元素的矩阵(m 行, n 列),请按照顺时针螺旋顺序,返回矩阵中的所有元素。 示例 1: 输入: [ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ] ] 输出: [1,2,3,6,9,8,7,4,5] 示例 2: 输入: [ [1, 2, 3, 4], [5, 6, 7, 8], [9,10,11,12] ] 输出: [1,

  • 给定一个正整数 n,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的正方形矩阵。 示例: 输入: 3 输出: [ [ 1, 2, 3 ], [ 8, 9, 4 ], [ 7, 6, 5 ] ] 解法如下: /** * @param {number} n * @return {number[][]} */ var generateMatrix = f

  • 问题内容: 我需要创建围绕其中心旋转的矩形(因此它们不必平行于坐标系的轴)。因此,基本上每个矩形都可以由 center-X , center-Y , width , height 和 angle定义 。然后,我要做的是对这些矩形中是否包含某些点进行计算(因此不会涉及任何绘图)。我想我不能使用该类,因为这些矩形将始终与坐标系的x和y轴平行。是通过编写自己的矩形类来获得此功能的唯一方法,还是可以使用任