励志用少的代码做高效表达
题目描述
±------------------------------------------------+
| |
| H###### #### |
| # # # |
| # # # |
| # #### # # |
| # # # # # |
| ######@### # # |
| # #### # # |
| # # # # # |
| ####@#######@### # # |
| # # # # # |
| T ##### # # # ## |
| # # ### ### ## |
| ################ # # #### |
| # # # # |
| ############## #######@########## |
| # ### |
| ########################### |
±------------------------------------------------+
小明在爷爷的私人收藏馆里找到一台老式电脑。居然没有图形界面,只能用控制台编程。
经过小明的一阵摸索,神奇地设计出了控制台上的贪食蛇游戏。
如上图,是游戏时画面截图。
其中,H表示蛇头,T表示蛇尾。#表示蛇的身体,@表示身体交叉重叠的地方。
你能说出现在的贪吃蛇长度是多少吗?
其实,只要数出#的数目算1,数出@的数目,算2,再加上头尾各算1就计算好了。
人工数一下?太累眼睛了,聪明的你为什么不让计算机帮忙呢?
本题的要求就是: 请填写上图中贪食蛇的长度是多少?
注意:需要提交的是一个整数,不要添加任何多余内容(比如说明或注释)
几种解法与思考
虽是水题, 但不影响我们从中学到点什么, 以下面两个解法为例拓展知识。
解法一: word查询字符
秉承能不写代码就不写代码(写代码易出错)的原则,我们可以将贪吃蛇copy到word文档中, 用word中的替换功能查找#和@出现的次数。 如图:
解法二:文件输入
用fstream中的ifstream做文件输出, 免除将贪吃蛇copy到代码中,统一格式的困扰。最后循环判断即可。
注意:在进行文件读取时,需要将代码与读取文件放在同一路径下,比如都放在桌面上。
代码:
#include<iostream>
#include<fstream>
using namespace std;
int main() {
ifstream fin("Snake.txt");
char s;
int num = 2; //代表头和尾
while(fin >> s) {
if(s == '#') num++;
else if(s == '@') num+=2;
}
cout << num << endl;
return 0; }
解法三:常规方法
直接将贪吃蛇copy到字符串数组中, 循环判断
注意:直接将贪吃蛇copy进来会报错, 一种解决办法是:将所有字符都放在一行里。
另一种解决办法是:使用续行符(反斜杠)。
续行符相关知识——>传送门
续行符代码示例:
#include<iostream>
#include<fstream>
using namespace std;
int main() {
string s = {
"\
+-------------------------------------------------+\
| |\
| H###### #### |\
| # # # |\
| # # # |\
| # #### # # |\
| # # # # # |\
| ######@### # # |\
| # #### # # |\
| # # # # # |\
| ####@#######@### # # |\
| # # # # # |\
| T ##### # # # ## |\
| # # ### ### ## |\
| ################ # # #### |\
| # # # # |\
| ############## #######@########## |\
| # ### |\
| ########################### |\
+-------------------------------------------------+\
"}
int num = 2; //代表头和尾
while(fin >> s) {
if(s == '#') num++;
else if(s == '@') num+=2;
}
cout << num << endl;
return 0; }
总结
题目虽小, 但如果我们以优化,精进的角度看这道题, 还是有很多可取之处的。
1 对于大量处理输入数据的题目, 可以使用文件输入的方法,在蓝桥杯中应用很广泛。
2 使用续行符, 可以使代码可读性提高
3 蓝桥杯重应用,灵活使用word、excel等软件可以避免麻烦的编程
努力只能及格,拼命才能优秀! 加油,陌生人!