创建 "Mario Style Pyramid"

Creating a "Mario Style Pyramid"

我正在学习哈佛 CS50 在线课程,其中一个问题是使用空格和哈希创建 "mario style pyramid"。我已经解决了空间问题,但哈希给我带来了麻烦。这是代码:

#include <stdio.h>
#include <cs50.h>

int main(void)
{
    //get height between 1 and 23
    int height;
    do
    {
        printf("Please enter a height: ");
        height = GetInt();
    }
    while (height < 1 || height > 23);

    //build pyramid
    for (int i = 0; i < height ; i++)
    {
        //add spaces
        for (int space = height - 1 - i; space >= 0; space--)
            printf(" ");

        //add hashtags
        for (int hash = 2 + i; hash <= height; hash++)
            printf("#");

        printf("\n");
    }
}

当我 运行 它在高度为 5 的终端中时,我得到这个:

     ####
    ###
   ##
  #
   <-- space here also

当我想要这个时:

    ##
   ###
  ####
 #####
######

如有任何反馈,我们将不胜感激,谢谢

只需使用以下代码尝试一下:

int main(void)
{
    int height;
    printf("Please enter a height: ");
    scanf("%d", &height);

    //build pyramid
    for (int i = height; i >= 1; i--)
    {
        //add spaces
        for (int space = 1; space < i; space++)
            printf(" ");

        //add hashtags
        for (int hash = height; hash >= i-1; hash--)
            printf("#");

        printf("\n");
    }
}

height的值为5时,你得到了想要的输出:

    ##
   ###
  ####
 #####
######

参见Working Fiddle


在你的代码中,当i的值为0时:

for (int i = 0; i < height ; i++)
         ^^^^^^

其他循环执行如下:

for (int space = height - 1 - i; space >= 0; space--)
    printf(" ");

这里,循环初始化space = 4(当height5)和循环条件在 space >= 0 之前有效,因此它将前 4 个字符打印为 " ".

最后,当谈到这个循环时:

for (int hash = 2 + i; hash <= height; hash++)
    printf("#");

这里,循环初始化 hash = 2 (i 在第一个循环中是 0 ,还记得吗?) 并且循环条件一直持续到 hash <= height。因此,它将接下来的 4 个字符打印为 "#",因为上述条件的计算结果为 2,3,4,5 in:

(int hash = 2; hash <= 5; hash++)
           ^^^        ^^^

其余代码继续并产生如下输出:

     ####
    ###
   ##
  #

如果你能理解上面的逻辑,那么你也能破解我的解法:)