13行代码AC_2017年省赛C组蓝桥杯第一题 贪吃蛇长度(考查文件读取)
勵(lì)志用少的代碼做高效表達(dá)
題目描述
±------------------------------------------------+
| |
| H###### #### |
| # # # |
| # # # |
| # #### # # |
| # # # # # |
| ######@### # # |
| # #### # # |
| # # # # # |
| ####@#######@### # # |
| # # # # # |
| T ##### # # # ## |
| # # ### ### ## |
| ################ # # #### |
| # # # # |
| ############## #######@########## |
| # ### |
| ########################### |
±------------------------------------------------+
小明在爺爺?shù)乃饺耸詹仞^里找到一臺(tái)老式電腦。居然沒(méi)有圖形界面,只能用控制臺(tái)編程。
經(jīng)過(guò)小明的一陣摸索,神奇地設(shè)計(jì)出了控制臺(tái)上的貪食蛇游戲。
如上圖,是游戲時(shí)畫面截圖。
其中,H表示蛇頭,T表示蛇尾。#表示蛇的身體,@表示身體交叉重疊的地方。
你能說(shuō)出現(xiàn)在的貪吃蛇長(zhǎng)度是多少嗎?
其實(shí),只要數(shù)出#的數(shù)目算1,數(shù)出@的數(shù)目,算2,再加上頭尾各算1就計(jì)算好了。
人工數(shù)一下?太累眼睛了,聰明的你為什么不讓計(jì)算機(jī)幫忙呢?
本題的要求就是: 請(qǐng)?zhí)顚懮蠄D中貪食蛇的長(zhǎng)度是多少?
注意:需要提交的是一個(gè)整數(shù),不要添加任何多余內(nèi)容(比如說(shuō)明或注釋)
幾種解法與思考
雖是水題, 但不影響我們從中學(xué)到點(diǎn)什么, 以下面兩個(gè)解法為例拓展知識(shí)。
解法一: word查詢字符
秉承能不寫代碼就不寫代碼(寫代碼易出錯(cuò))的原則,我們可以將貪吃蛇copy到word文檔中, 用word中的替換功能查找#和@出現(xiàn)的次數(shù)。 如圖:
解法二:文件輸入
用fstream中的ifstream做文件輸出, 免除將貪吃蛇copy到代碼中,統(tǒng)一格式的困擾。最后循環(huán)判斷即可。
注意:在進(jìn)行文件讀取時(shí),需要將代碼與讀取文件放在同一路徑下,比如都放在桌面上。
代碼:
解法三:常規(guī)方法
直接將貪吃蛇copy到字符串?dāng)?shù)組中, 循環(huán)判斷
注意:直接將貪吃蛇copy進(jìn)來(lái)會(huì)報(bào)錯(cuò), 一種解決辦法是:將所有字符都放在一行里。
另一種解決辦法是:使用續(xù)行符(反斜杠)。
續(xù)行符相關(guān)知識(shí)——>傳送門
續(xù)行符代碼示例:
#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; }總結(jié)
題目雖小, 但如果我們以優(yōu)化,精進(jìn)的角度看這道題, 還是有很多可取之處的。
1 對(duì)于大量處理輸入數(shù)據(jù)的題目, 可以使用文件輸入的方法,在藍(lán)橋杯中應(yīng)用很廣泛。
2 使用續(xù)行符, 可以使代碼可讀性提高
3 藍(lán)橋杯重應(yīng)用,靈活使用word、excel等軟件可以避免麻煩的編程
努力只能及格,拼命才能優(yōu)秀! 加油,陌生人!
總結(jié)
以上是生活随笔為你收集整理的13行代码AC_2017年省赛C组蓝桥杯第一题 贪吃蛇长度(考查文件读取)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 25行代码AC_蓝桥杯 2017A组省赛
- 下一篇: 15行代码AC_ 【蓝桥杯】兴趣小组(解