题解:洛谷 P1000 超级玛丽游戏
【题目来源】
【题目描述】
超级玛丽是一个非常经典的游戏。请你用字符画的形式输出超级玛丽中的一个场景。
********
************
####.....
#..##.....#....
###.......##### ### ###
........... #... #...
##*###### #..# #..#
####*******##### #..# #..#
...#***.****.*##.... #... #...
....**********##..... ### ###
....**** *****....
#### ####
###### ######
##############################################################
#.........#.#.........#.#.........#.#------------------
###########################################------------------
#......#....#......#....#......#....####################
########################################## #----------
#...........##...........##...........# #----------
########################################## #----------
#...#......##...#......##...#......# #----------
########################################## ############
【输入】
无
【输出】
如描述
【核心思想】
-
问题分析:要求用字符画的形式输出超级玛丽游戏中的一个固定场景。这是一个纯输出任务,不涉及任何输入处理或算法逻辑。
-
算法选择:
- 直接输出:场景内容完全固定,使用
cout逐行输出即可
- 直接输出:场景内容完全固定,使用
-
关键步骤:
- 包含头文件:
#include <iostream>引入输入输出流库 - 使用命名空间:
using namespace std; - 逐行输出字符画:按照题目给定的图案,使用
cout配合endl逐行输出 - 保持格式一致:每行的空格、字符、对齐方式必须与题目描述完全一致
- 包含头文件:
-
时间/空间复杂度:
- 时间复杂度:\(O(1)\),固定行数输出
- 空间复杂度:\(O(1)\),无额外存储
-
固定内容输出的核心思想:
- 精确复制:ASCII 艺术画的每个字符(包括空格)都影响最终显示效果,必须逐字符精确复制
- 换行控制:每行末尾使用
endl确保正确换行 - 无算法需求:此类问题仅考察基本语法和输出能力,不涉及任何数据结构或算法
- 适用于字符画输出、固定格式打印类入门问题
【算法标签】
入门 #字符串入门
【代码详解】
#include <iostream> // 包含标准输入输出流库
using namespace std; // 使用标准命名空间
/**
* 主函数 - 程序入口
* @return 程序执行状态码(0表示成功)
*/
int main()
{
// 输出ASCII艺术字的上半部分(火箭头部和主体)
cout << " ********" << endl; // 火箭顶部装饰
cout << " ************" << endl; // 火箭顶部扩大部分
cout << " ####....." << endl; // 火箭头部细节1
cout << " #..##.....#...." << endl; // 火箭头部细节2
cout << " ###.......##### ### ###" << endl; // 火箭主体开始部分
// 输出火箭中部细节(包含对称图案)
cout << " ........... #... #..." << endl; // 对称装饰1
cout << " ##*###### #..# #..#" << endl; // 对称装饰2
cout << " ####*******##### #..# #..#" << endl; // 对称装饰3
cout << " ...#***.****.*##.... #... #..." << endl; // 对称装饰4
cout << " ....**********##..... ### ###" << endl; // 对称装饰5
// 输出火箭尾部连接部分
cout << " ....**** *****...." << endl; // 尾部过渡1
cout << " #### ####" << endl; // 尾部过渡2
cout << " ###### ######" << endl; // 尾部过渡3
// 输出发射台部分(大面积图案)
cout << "##############################################################" << endl; // 发射台顶部
cout << "#.........#.#.........#.#.........#.#------------------" << endl; // 发射台细节1
cout << "###########################################------------------" << endl; // 发射台细节2
cout << "#......#....#......#....#......#....####################" << endl; // 发射台细节3
cout << "########################################## #----------" << endl; // 发射台细节4
cout << "#...........##...........##...........# #----------" << endl; // 发射台细节5
cout << "########################################## #----------" << endl; // 发射台细节6
cout << "#...#......##...#......##...#......# #----------" << endl; // 发射台细节7
cout << "########################################## ############" << endl; // 发射台底部
return 0; // 返回程序执行成功状态码
}
【运行结果】
********
************
####.....
#..##.....#....
###.......##### ### ###
........... #... #...
##*###### #..# #..#
####*******##### #..# #..#
...#***.****.*##.... #... #...
....**********##..... ### ###
....**** *****....
#### ####
###### ######
##############################################################
#.........#.#.........#.#.........#.#------------------
###########################################------------------
#......#....#......#....#......#....####################
########################################## #----------
#...........##...........##...........# #----------
########################################## #----------
#...#......##...#......##...#......# #----------
########################################## ############
浙公网安备 33010602011771号