gpt4 book ai didi

java - 如何打印给定数字 n 的魔术矩阵最多 n 方

转载 作者:行者123 更新时间:2023-12-01 22:25:25 28 4
gpt4 key购买 nike

我正在尝试在程序谜语中实现矩阵逻辑。这不是一项家庭作业,我只是想自己练习一下,但可以在没有指导或方法的情况下走得更远。

问题是假设我们给了数字 n,那么矩阵应该生成最多 n*n 个数字,并具有以下模式

例如:数字是 3

1 2 3

7 8 9

4 5 6

如果数字是 4,同样如此比

1 2 3 4

9 10 11 12

13 14 15 16

5 6 7 8

为了解决问题,我使用了以下逻辑,但它无法给我预期的输出

public static void printPattern(int i){
int num= i*i;
int n=1;
int[][] matrixArray = new int[i][i];

for (int g=0;g<i ;g++ ){

for (int j=0; j<i&& n<=num; j++,n++){
System.out.println("i::"+i+"::j"+j+"number is :"+n);
if (g!=0 &&g%2==0){
System.out.println("g is "+g);
matrixArray[g][j]=n;
}
else{
matrixArray[g][j]=n;
}
}
}

for (int g=0;g<i ;g++ ) {

for (int j = 0; j < i; j++) {
System.out.print(matrixArray[g][j] + " ");
}
System.out.println();
}
}
}

最佳答案

这是一个更简单的方法。只需在主循环中保持 topbottom 行之间的交替,您就根本不需要使用 if-else 结构。

public static void printMatrix(int num) {
int n = 1;
int[][] matrix = new int[num][num];
for (int top = 0, bottom = num - 1; top <= bottom; top++, bottom--) {
for (int i = 0; i < num; i++) {
matrix[top][i] = n++;
}
if (top == bottom) {
break;
}
for (int i = 0; i < num; i++) {
matrix[bottom][i] = n++;
}
}
for (int[] arr : matrix) {
System.out.println(Arrays.toString(arr));
}
}

这里循环运行直到top穿过bottom,即当top =bottom + 1对于偶数数时行数。对于奇数行数,当顶部 = 底部填充该行一次之后,循环中断结束。

输出: printMatrix(4);//偶数

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

输出: printMatrix(5);//奇数

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

关于java - 如何打印给定数字 n 的魔术矩阵最多 n 方,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28893949/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com