【发布时间】:2020-06-09 12:47:49
【问题描述】:
谢谢你的帮助:screenshot
刚接触编程并试图理解为什么第 17 行中的代码会产生左对齐金字塔的期望结果的逻辑。只是试图完全理解为什么 x= height - y - 1 会给出预期的结果。
【问题讨论】:
-
请不要将代码发布为图像或图像链接 - reasoning。将其作为格式化文本直接粘贴到问题中。
谢谢你的帮助:screenshot
刚接触编程并试图理解为什么第 17 行中的代码会产生左对齐金字塔的期望结果的逻辑。只是试图完全理解为什么 x= height - y - 1 会给出预期的结果。
【问题讨论】:
这个sn-p
for (int x = height - y - 1; x < height; x++)
{
print("#");
}
与对齐没有任何关系。金字塔将始终保持左对齐,没有空格 (" ") 打印循环,您的代码中没有,您可能也不需要。
现在让我们通过迭代来了解发生了什么
认为height 是 5
在外循环的第一次迭代中(即for (int y = 0; y < height; y++))
y = 0x = 高度 - y - 1 = 5 - 0 - 1 = 4所以x 从 4 开始并在 到达 height 之前停止,即 5。所以这个循环将准确执行 1 次。这意味着它将打印一个 singular #。
在外循环的第二次迭代中
y = 1x = 高度 - y - 1 = 5 - 1 - 1 = 3所以x 从 3 开始并在 到达 height 之前停止,即 5。所以这个循环将准确执行 2 次strong>。这意味着它将打印# 两次。
在外循环的第三次迭代中
y = 2x = 高度 - y - 1 = 5 - 2 - 1 = 2所以x 从 2 开始并在 到达 height 之前停止,即 5。所以这个循环将准确执行 3 次。这意味着它将打印# 三次。
在外循环的第四次迭代中
y = 3x = 高度 - y - 1 = 5 - 3 - 1 = 1所以x 从 1 开始并在 到达 height 之前停止,即 5。所以这个循环将准确执行 4 次。这意味着它将打印# 4 次。
在外循环的第五次也是最后一次迭代中
y = 4x = 高度 - 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 并将其设置为打印哈希值的上限。
【讨论】: