千里之行,始于足下,让我们从今天开始,走上通向神犇的道路!
同志们,加油!
任何一个伟大的思想,都有一个微不足道的开始。
声明:理解为重,代码次之!
前言
这道题虽然在代码实现上没有任何难度,但是对于不同的语言,
这篇博客将会讨论c++
,c
和python
的做法因为我只会这几种
请注意,这篇博客可能有些内容对新手并不友好,对于看不懂的地方可以直接跳过,等到实力增强了之后再来观看。
思路分析
题目让我们输出以下图案:
********
************
####....#.
#..###.....##....
###.......###### ### ###
........... #...# #...#
##*####### #.#.# #.#.#
####*******###### #.#.# #.#.#
...#***.****.*###.... #...# #...#
....**********##..... ### ###
....**** *****....
#### ####
###### ######
##############################################################
#...#......#.##...#......#.##...#......#.##------------------#
###########################################------------------#
#..#....#....##..#....#....##..#....#....#####################
########################################## #----------#
#.....#......##.....#......##.....#......# #----------#
########################################## #----------#
#.#..#....#..##.#..#....#..##.#..#....#..# #----------#
########################################## ############
所以对于这道题,我们可以直接对其进行输出即可。
尽管每种语言的具体实现不同,但是其思想是相通的。接下来将针对每一种语言进行讲解。
C++
由于c++
中可以用C
语言的函数,所以用C
风格编写的方法,将在下一小节进行详细叙述。
对于C++
的程序,我将会用cout
进行输出,对于cout
的详细使用方法见这篇博文:C++中cout的使用。
C++98标准
由于C++98
比较古老,一些最新的语法与函数并不支持,所以并不推荐大家使用C++98
标准。
对于C++98
,我们只能(作者已知,有其他方法请在评论区指出)用cout
进行输出,在每行之间使用\n
进行换行,或者用endl
(在本题中并不推荐)。
C++11及以上标准
这些是最推荐使用的标准,新增了不少函数,可以大大简短代码长度。本人认为最为有益的改进是以下几点(可跳过):
auto
自动类型判断。这样可以进行自动判断类型,避免了STL容器的vector<int>::iterator iter = vec.begin()
的繁琐写法,可以直接auto iter = vec.begin()
,而且搭配其它改进可以发挥更加强大的效果。for(auto x : vec)
数组遍历。这样就可以用简短的代码来遍历整个数组,也减少了诸如vec[i]
的写法。但是它的方法也很明显,就是不能灵活控制数组下标,这一点不如原来的for(int i = 0; i < n; i++)
的写法。lambda
匿名函数。这样不必要在main()
外面定义函数了,可以直接在里面定义函数。加上auto
的写法,就可以无需顾虑类型,放心大胆地去写了。
说了这么多,现在回归正题。
当然,C++11
也是可以用C++98
的写法的,但是在C++11
中添加了原生字符串,详细介绍见:C++11 原生字符串。
所以,我们可以用R"(
和)"
对这个图案进行包裹,再对前置空格进行处理,就可以完成题目了。
C
C
中最常用的输出函数就是printf()
了,详细介绍见:[c++库函数] printf函数使用方法。
printf()
有一种很神奇的用法,就是可以printf("<式样化字符串>","<式样化字符串>",...)
,所以根据这一特点,我们没必要写大量的printf(...)
,而是只需要将每一行写入printf()
中即可。
Python
对于Python
作者了解不多,但是我们可以用Python
中的跨行字符串来进行输出,两端用'''
和'''
包裹,与C++11
的方法所类似。
代码演示
C++98代码
与C
代码类似,稍作修改即可。
C++11代码
#include <bits/stdc++.h>
using namespace std;
int main() {
cout << R"( ********
************
####....#.
#..###.....##....
###.......###### ### ###
........... #...# #...#
##*####### #.#.# #.#.#
####*******###### #.#.# #.#.#
...#***.****.*###.... #...# #...#
....**********##..... ### ###
....**** *****....
#### ####
###### ######
##############################################################
#...#......#.##...#......#.##...#......#.##------------------#
###########################################------------------#
#..#....#....##..#....#....##..#....#....#####################
########################################## #----------#
#.....#......##.....#......##.....#......# #----------#
########################################## #----------#
#.#..#....#..##.#..#....#..##.#..#....#..# #----------#
########################################## ############
)";
return 0;
}
C代码
#include <stdio.h>
int main() {
printf(
" ********\n"
" ************\n"
" ####....#.\n"
" #..###.....##....\n"
" ###.......###### ### ###\n"
" ........... #...# #...#\n"
" ##*####### #.#.# #.#.#\n"
" ####*******###### #.#.# #.#.#\n"
" ...#***.****.*###.... #...# #...#\n"
" ....**********##..... ### ###\n"
" ....**** *****....\n"
" #### ####\n"
" ###### ######\n"
"##############################################################\n"
"#...#......#.##...#......#.##...#......#.##------------------#\n"
"###########################################------------------#\n"
"#..#....#....##..#....#....##..#....#....#####################\n"
"########################################## #----------#\n"
"#.....#......##.....#......##.....#......# #----------#\n"
"########################################## #----------#\n"
"#.#..#....#..##.#..#....#..##.#..#....#..# #----------#\n"
"########################################## ############\n"
);
return 0;
}
Python代码
print(''' ********
************
####....#.
#..###.....##....
###.......###### ### ###
........... #...# #...#
##*####### #.#.# #.#.#
####*******###### #.#.# #.#.#
...#***.****.*###.... #...# #...#
....**********##..... ### ###
....**** *****....
#### ####
###### ######
##############################################################
#...#......#.##...#......#.##...#......#.##------------------#
###########################################------------------#
#..#....#....##..#....#....##..#....#....#####################
########################################## #----------#
#.....#......##.....#......##.....#......# #----------#
########################################## #----------#
#.#..#....#..##.#..#....#..##.#..#....#..# #----------#
########################################## ############''')
总结
这只是一道基础的输入输出题,常为各大OJ网站的试机题,无思维难度,但是对空格的控制与排版稍有难度。
完结撒花!🎉🎉🎉