嘿,谢谢您的帮助:screenshot
编程和尝试理解逻辑的原因,第17行中的代码为何产生左对齐金字塔的期望结果。只是试图完全理解为什么x = height-y-1可以得到理想的结果。
答案 0 :(得分:2)
此代码段
for (int x = height - y - 1; x < height; x++)
{
print("#");
}
与对齐没有任何关系。金字塔将始终保持对齐状态而没有空格(" "
)打印循环,您的代码中没有该循环,您可能也不需要。
现在让我们遍历迭代以了解发生了什么
考虑将height
设为5
在外循环的第一个迭代中(即for (int y = 0; y < height; y++)
)
y
= 0 x
=高度-y-1 = 5-0-1 = 4 因此x
从4开始并在到达height
的之前停止,即5。因此,此循环将精确地执行 1次。这意味着它将打印单数 #
。
在外循环的第二次迭代中
y
= 1 x
=高度-y-1 = 5-1-1 = 3 因此,x
从3开始,直到到达height
,即 5为止。即5。因此,此循环将精确地执行 2次。这意味着它将打印#
两次。
在外循环的第三次迭代中
y
= 2 x
=高度-y-1 = 5-2-1 = 2 因此,x
从2开始,直到到达height
,即 5为止。即5。因此,此循环将准确地执行 3次。这意味着它将打印#
三次。
在外循环的第四次迭代中
y
= 3 x
=高度-y-1 = 5-3-1 = 1 因此,x
从1开始并在到达height
的之前终止,即5。因此,此循环将精确地执行 4次。这意味着它将#
打印四次。
在外循环的第五次也是最后一次迭代中
y
= 4 x
=高度-y-1 = 5-4-1 = 0 因此x
从0开始,直到到达height
的 为止,即5。因此,此循环将精确地执行 5次。这意味着它将#
打印 5次。
因此要实现该逻辑,是使用x = height - y - 1
的原因。但是,还有其他方法可以做到这一点-
for (int x = 0; x < y + 1; x++)
{
print("#");
}
这也将以相同的逻辑工作,但希望不会造成混淆。
注意,每行中打印的字符数与行号如何匹配。因此,第一行有1个哈希,第二行有2个哈希,依此类推。我们可以从y
推导出行号。对于第一行y = 0
,对于第二行y = 1
,依此类推。因此,我们可以简单地将1
添加到y
并将其设置为打印哈希值的上限。