我找到了一种曲折矩阵的方法,但我愿意为三角形图案找到与干净代码相同的方法。
示例:- 输入= 3
1
32
456
我已经在此处编码了编号的矩阵代码
int k=0;
int t=1;
int n=4;
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
k+=t;
System.out.print(k);
}
k=k+n+t;
t=-t;
System.out.println();
}
1234
8765
9101112
16151413
答案 0 :(得分:2)
int n = 6;
int num = 0;
int step = 1;
for (int i = 1; i <= n; i++) {
// num : (i² - i + 2)/2 .. same + i - 1
for (int j = 0; j < i; j++) {
num += step;
System.out.print(num);
System.out.print(' ');
}
num += i + (1 + 3*step)/2;
step = -step; // zig resp. zag
System.out.println();
}
有用的是将 i 编号为精确包含 i 元素的行。
屈服
1
3 2
4 5 6
10 9 8 7
11 12 13 14 15
21 20 19 18 17 16
问题是i
号的每一行i
的最小值都是(i² - i + 2)/2
,
对于 next 之字形,第一步需要考虑以下步骤。
从最后一行到下一行的第一行有两种情况:
这两种情况的两种公式都可以通过该步骤统一。
step i num
+ 1 1 -> 4 += i + 2
- 2 2 -> 3 += i - 1
+ 3 6 -> 11 += i + 2
- 4 7 -> 10 += i - 1
答案 1 :(得分:1)
以下将起作用:
public static void zigZag(int rows) {
int current = 1;
int increment = 1;
for (int row = 1; row <= rows; row++) {
int width = row + current;
for (int element = current; element < width; element++) {
System.out.print(current);
current+=increment;
}
System.out.println();
current += row + 0.5 - (0.5*increment);
increment = -increment;
}
}
编辑:只是一个注释,因为我怀疑您的问题可能是出于家庭作业的动机,因此,如果您能够了解正在发生的事情而不仅仅是复制粘贴,可能会有所帮助。
真正需要更改的是在内部循环中使用外部循环变量(最初创建矩阵正方形的那个变量,我称为行),该变量打印行的各个元素。
然后将其用于计算下一行的第一个元素。增量值的作用与原始值相同,但现在它也可以用于使之字形模式以非1的整数递增。
答案 2 :(得分:1)
从三角形(1)的顶部开始,将是第1行,所有随后的偶数行将反向打印。知道您可以尝试这样的事情:
public class StackOverflow {
public static void main(String[] args) {
int triangleSize = 5;
int counter = 1;
int rowSize = 1;
for (int i = 1; i <= triangleSize; i++) {
if (i % 2 == 0) {
// Reverse number sequence
int reverseCounter = counter + rowSize - 1;
for (int j = 0; j < rowSize; j++) {
System.out.print(reverseCounter--);
counter++;
}
} else {
for (int j = 0; j < rowSize; j++) {
System.out.print(counter++);
}
}
System.out.println("");
rowSize++;
}
}
}
保持跟踪您所在的行(rowSize)和您所在的值(计数器)。当您在偶数行上时,必须从该行将具有的最大值开始,并从该行开始倒数,但仍要增加普通计数器的值(int reverseCounter = counter + rowSize + 1)。
结果:
1
32
456
10987
1112131415
答案 3 :(得分:0)
尝试这个,我为您编码
public class TriangleNum{
public static void main(String[] args) {
getTringle(5);
}
public static void getTringle(int j){
for (int i =0; i<j;i++) {
System.out.print(i+ "\r" );
for (int k =0; k<i;k++) {
System.out.print(k+ "\t" );
}
}
}
}