创建 "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时,你得到了想要的输出:
##
###
####
#####
######
在你的代码中,当i
的值为0时:
for (int i = 0; i < height ; i++)
^^^^^^
其他循环执行如下:
for (int space = height - 1 - i; space >= 0; space--)
printf(" ");
这里,循环初始化space = 4(当height
是5)和循环条件在 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++)
^^^ ^^^
其余代码继续并产生如下输出:
####
###
##
#
如果你能理解上面的逻辑,那么你也能破解我的解法:)
我正在学习哈佛 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时,你得到了想要的输出:
##
###
####
#####
######
在你的代码中,当i
的值为0时:
for (int i = 0; i < height ; i++)
^^^^^^
其他循环执行如下:
for (int space = height - 1 - i; space >= 0; space--)
printf(" ");
这里,循环初始化space = 4(当height
是5)和循环条件在 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++)
^^^ ^^^
其余代码继续并产生如下输出:
####
###
##
#
如果你能理解上面的逻辑,那么你也能破解我的解法:)