我一直在努力解决Java中的循环模式(两边都有空格)
0
000
00000
0000000
00000
000
0
这是我一直在做的事情:
for (int i = 1; i <= 5; i++) {
for (int s = 5; s > i; s--) {
System.out.print(" ");
}
for (int j = 1; j < i; j++) {
System.out.print("0");
}
for (int j = 1; j < i; j++) {
System.out.print("0");
}
System.out.println("");
}
for (int i = 1; i <= 5; i++) {
for (int s = 1; s < i; s++) {
System.out.print(" ");
}
for (int j = 5; j > i; j--) {
System.out.print("0");
}
for (int j = 5; j > i; j--) {
System.out.print("0");
}
System.out.println("");
}
正如您可能已经知道的那样,我已经能够弄清楚如何使用每行中奇数个0来打印此模式,但我无法为我的生活做准备弄清楚如何用奇数来做。谢谢。
答案 0 :(得分:2)
有时候有点参数化问题会有所帮助;然后你可以把它写在纸上,看看是否有任何模式。例如,在您想要的输出中:
0
000
00000
0000000
00000
000
0
首先,让我们选择一种方便的方式来描述一行。让我们说一行i
是s
个空格后跟z
个零,整个模式可以是rows
行。{现在把它写出来。当rows
为7时
i s z
0 3 1
1 2 3
2 1 5
3 0 7
4 1 5
5 2 3
6 3 1
如果rows
是5,那该怎么样?
i s z
0 2 1
1 1 3
2 0 5
3 1 3
4 2 1
偶数怎么样?我们必须选择我们想要它的样子,如何:
00
0000
000000
000000
0000
00
所以,当rows
为6时:
i s z
0 2 2
1 1 4
2 0 6
3 0 6
4 1 4
5 2 2
好的,现在,让我们寻找模式吧! z
很简单:我们可以从数字和视觉上看到z
是s
和rows
的函数:
z = rows - (2 * s);
也就是说,我们知道总宽度等于高度(行),我们知道在零之前和之后有相同数量的空格。
现在归结为从s
和i
找出rows
。好吧,经过一些头脑刮擦和实验,我们可以看到i < rows / 2
:
s = (rows - 1) / 2 - i;
当i >= rows / 2
:
s = i - rows / 2;
现在,这一切都在一起,例如:
void diamond (int rows) {
for (int i = 0; i < rows; ++ i) {
int s;
if (i < rows / 2)
s = (rows - 1) / 2 - i;
else
s = i - rows / 2;
int z = rows - (2 * s);
// print s spaces, then z zeroes, then a newline
}
}
我将打印s
空格和z
零的任务作为练习留给读者。
对于此类问题,这是一种相当普遍的问题解决方法:
第1步是最重要的一步,因为它定义了一种方法,可以将复杂的任务(绘制钻石)转换为更简单的问题(将s
确定为i
的函数, rows
)。
答案 1 :(得分:1)
你可以尝试这个 -
for (int i = 1; i < 10; i += 2) {
for (int j = 0; j < 9 - i / 2; j++)
System.out.print(" ");
for (int j = 0; j < i; j++)
System.out.print("*");
System.out.print("\n");
}
for (int i = 7; i > 0; i -= 2) {
for (int j = 0; j < 9 - i / 2; j++)
System.out.print(" ");
for (int j = 0; j < i; j++)
System.out.print("*");
System.out.print("\n");
}
}
答案 2 :(得分:1)
试试这个,
public static void main(String []args){
int i = -1;
for (int j = 0; j < 7; j +=2) {
i++;
for (int k = i; k < 3; k++)
System.out.print(" ");
for (int z = 0; z <= j; z++) {
System.out.print(0);
}
System.out.println();
}
i=0;
for(int j=4; j>=0;j-=2){
i++;
for(int k=0;k<i;k++)
System.out.print(" ");
for(int z=0;z<=j ;z++)
System.out.print(0);
System.out.println();
}
}
答案 3 :(得分:0)
如何将第一个j=1
更改为j=2
并将第一个j=5
更改为j=4
,以便从每个循环中减少一个?< / p>