Cs50 PSET 1 马里奥不太舒服
Cs50 PSET 1 Mario less comfortable
嘿谢谢你的帮助:screenshot
编程新手并试图理解为什么第 17 行中的代码产生左对齐金字塔的期望结果的逻辑。只是想完全理解为什么 x= height - y - 1 给出了预期的结果。
这个片段
for (int x = height - y - 1; x < height; x++)
{
print("#");
}
与对齐无关。金字塔将始终在没有 space(" "
) 打印循环的情况下左对齐,您的代码中没有,您可能也不需要。
现在让我们通过迭代了解发生了什么
将 height
视为 5
在外循环的第一次迭代中(即for (int y = 0; y < height; y++)
)
y
= 0
x
= 高度 - y - 1 = 5 - 0 - 1 = 4
所以x
从4开始,在到达height
之前停止,即5。所以这个循环将恰好执行1时间。这意味着它将打印 singular #
.
在外循环的第二次迭代中
y
= 1
x
=身高-y-1=5-1-1=3
所以 x
从 3 开始,在 到达 height
之前停止 ,即 5。所以这个循环将恰好执行 2次。这意味着它将打印 #
两次 .
在外循环的第三次迭代中
y
= 2
x
=身高-y-1=5-2-1=2
所以 x
从 2 开始,在 到达 height
之前停止 ,即 5。所以这个循环将恰好执行 3次。这意味着它将打印 #
三次 .
在外循环的第四次迭代中
y
= 3
x
=身高-y-1=5-3-1=1
所以x
从1开始,在到达height
之前停止,即5。所以这个循环将恰好执行4次。这意味着它将打印 #
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
并将其设置为我们的上限来打印哈希值。
嘿谢谢你的帮助:screenshot
编程新手并试图理解为什么第 17 行中的代码产生左对齐金字塔的期望结果的逻辑。只是想完全理解为什么 x= height - y - 1 给出了预期的结果。
这个片段
for (int x = height - y - 1; x < height; x++)
{
print("#");
}
与对齐无关。金字塔将始终在没有 space(" "
) 打印循环的情况下左对齐,您的代码中没有,您可能也不需要。
现在让我们通过迭代了解发生了什么
将 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次。这意味着它将打印 #
两次 .
在外循环的第三次迭代中
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
并将其设置为我们的上限来打印哈希值。