Mario - CS50x 2026

待解决的问题

在任天堂(Nintendo)的 Super Mario Brothers 第一关(World 1-1)开始处,Mario 必须跳过相邻的砖块金字塔,如下图所示。

screenshot of Mario jumping over adjacent pyramids

在一个名为 mario-more 的文件夹中创建一个名为 mario.c 的文件,用 C 语言实现一个程序来重现这个金字塔,并使用井号(#)代表砖块,如下所示:

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

让我们允许用户决定金字塔的高度,首先提示他们输入一个 1 到 8 之间(含 1 和 8)的正整数(int)。

示例

如果用户在提示时输入 8,程序的运行效果如下:

$ ./mario
Height: 8
       #  #
      ##  ##
     ###  ###
    ####  ####
   #####  #####
  ######  ######
 #######  #######
########  ########

如果用户在提示时输入 4,程序的运行效果如下:

$ ./mario
Height: 4
   #  #
  ##  ##
 ###  ###
####  ####

如果用户在提示时输入 2,程序的运行效果如下:

$ ./mario
Height: 2
 #  #
##  ##

如果用户在提示时输入 1,程序的运行效果如下:

$ ./mario
Height: 1
#  #

如果用户在提示时没有输入 1 到 8 之间(含 1 和 8)的正整数,程序应该重新提示用户,直到其输入符合要求:

$ ./mario
Height: -1
Height: 0
Height: 42
Height: 50
Height: 4
   #  #
  ##  ##
 ###  ###
####  ####

请注意,无论金字塔的高度如何,相邻金字塔之间的“间隙”宽度始终等于两个井号的宽度。

演练

如何测试你的代码

当你输入以下内容时,你的代码是否按预期工作:

  • -1(或其他负数)?
  • 0
  • 18
  • 9 或其他正数?
  • 字母或单词?
  • 完全没有输入,只按回车键?

你也可以执行以下命令,使用 check50 来评估代码的正确性。但请务必先自行编译并测试!

check50 cs50/problems/2026/x/mario/more

执行以下命令,使用 style50 来评估代码的风格。

style50 mario.c

如何提交

在你的终端中,执行以下命令来提交你的作品,并根据提示进行操作。

submit50 cs50/problems/2026/x/mario/more