簡體   English   中英

Cs50 PSET 1 馬里奧不太舒服

[英]Cs50 PSET 1 Mario less comfortable

嘿,謝謝你的幫助:截圖

編程新手並試圖理解為什么第 17 行中的代碼會產生左對齊金字塔的期望結果的邏輯。 只是試圖完全理解為什么 x= height - y - 1 會給出預期的結果。

這個片段

for (int x = height - y - 1; x < height; x++)
{
    print("#");
}

與 alignment 沒有任何關系。 金字塔將始終保持對齊,沒有空格( " " )打印循環,您的代碼中沒有,您可能也不需要。

現在讓我們通過迭代來了解發生了什么

考慮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。所以這個循環將被執行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 個 hash,第二行有 2 個,依此類推。 我們可以從y推導出行號。 對於第一行y = 0 ,對於第二行y = 1 ,依此類推。 所以我們可以簡單地將1添加到y並將其設置為打印哈希值的上限。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM