[英]Cs50 PSET 1 Mario less comfortable
這個片段
for (int x = height - y - 1; x < height; x++)
{
print("#");
}
與 alignment 沒有任何關系。 金字塔將始終保持對齊,沒有空格( " "
)打印循環,您的代碼中沒有,您可能也不需要。
現在讓我們通過迭代來了解發生了什么
考慮height
為5
在外循環的第一次迭代中(即for (int y = 0; y < height; y++)
)
y
= 0x
= 高度 - y - 1 = 5 - 0 - 1 = 4 所以x
從 4 開始並在達到height
之前停止,即 5。所以這個循環將被執行1 次。 這意味着它將打印一個單數#
。
在外循環的第二次迭代中
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 個 hash,第二行有 2 個,依此類推。 我們可以從y
推導出行號。 對於第一行y = 0
,對於第二行y = 1
,依此類推。 所以我們可以簡單地將1
添加到y
並將其設置為打印哈希值的上限。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.