【问题标题】:Cs50 PSET 1 Mario less comfortableCs50 PSET 1 马里奥不太舒服
【发布时间】:2020-06-09 12:47:49
【问题描述】:

谢谢你的帮助:screenshot

刚接触编程并试图理解为什么第 17 行中的代码会产生左对齐金字塔的期望结果的逻辑。只是试图完全理解为什么 x= height - y - 1 会给出预期的结果。

【问题讨论】:

  • 请不要将代码发布为图像或图像链接 - reasoning。将其作为格式化文本直接粘贴到问题中。

标签: c cs50


【解决方案1】:

这个sn-p

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

与对齐没有任何关系。金字塔将始终保持左对齐,没有空格 (" ") 打印循环,您的代码中没有,您可能也不需要。

现在让我们通过迭代来了解发生了什么

认为height 是 5

在外循环的第一次迭代中(即for (int y = 0; y &lt; 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 次​​strong>。这意味着它将打印# 两次

在外循环的第三次迭代中

  • 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 并将其设置为打印哈希值的上限。

【讨论】:

  • 非常感谢,我在跌跌撞撞之后一直在绞尽脑汁试图找出其中的逻辑。
  • 回来再次感谢你,能够在 30 分钟内更舒服地完成马里奥,因为你花时间解释了如此详细的逻辑。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-12-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多