java - 用于构建以下方阵的 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();
}
解决方案
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
由于这个问题在我看来就像一个家庭作业,为了您的调试乐趣,我会不评论解决方案,看看它是如何工作的。
推荐阅读
- python - 导入 matplotlib.pyplot 作为 plt 失败
- c - 在不改变输入的情况下实现 strcat
- swift - 无法通过完成处理程序或使用 Firebase 观察方法的任何其他方式传递完成的数组
- python - DataFrame 中的日期格式更改
- ios - 如何在 iPhone X 上滚动时隐藏状态栏上的内容
- java - Serenity/WebDriver:无法访问本地主机
- ios - IOS/Swift:解析 JSON 数据和字典
- java - 从休眠中获取线程“主”java.lang.NullPointerException中的异常
- swift - 当父级是标签栏视图控制器时,如何嵌入没有标签栏的视图控制器?
- php - 使用php7版本在cpanel上运行cron作业