13行代码AC_2017年省赛C组蓝桥杯第一题 贪吃蛇长度(考查文件读取)
勵志用少的代碼做高效表達
題目描述
±------------------------------------------------+
| |
| H###### #### |
| # # # |
| # # # |
| # #### # # |
| # # # # # |
| ######@### # # |
| # #### # # |
| # # # # # |
| ####@#######@### # # |
| # # # # # |
| T ##### # # # ## |
| # # ### ### ## |
| ################ # # #### |
| # # # # |
| ############## #######@########## |
| # ### |
| ########################### |
±------------------------------------------------+
小明在爺爺的私人收藏館里找到一臺老式電腦。居然沒有圖形界面,只能用控制臺編程。
經過小明的一陣摸索,神奇地設計出了控制臺上的貪食蛇游戲。
如上圖,是游戲時畫面截圖。
其中,H表示蛇頭,T表示蛇尾。#表示蛇的身體,@表示身體交叉重疊的地方。
你能說出現在的貪吃蛇長度是多少嗎?
其實,只要數出#的數目算1,數出@的數目,算2,再加上頭尾各算1就計算好了。
人工數一下?太累眼睛了,聰明的你為什么不讓計算機幫忙呢?
本題的要求就是: 請填寫上圖中貪食蛇的長度是多少?
注意:需要提交的是一個整數,不要添加任何多余內容(比如說明或注釋)
幾種解法與思考
雖是水題, 但不影響我們從中學到點什么, 以下面兩個解法為例拓展知識。
解法一: word查詢字符
秉承能不寫代碼就不寫代碼(寫代碼易出錯)的原則,我們可以將貪吃蛇copy到word文檔中, 用word中的替換功能查找#和@出現的次數。 如圖:
解法二:文件輸入
用fstream中的ifstream做文件輸出, 免除將貪吃蛇copy到代碼中,統一格式的困擾。最后循環判斷即可。
注意:在進行文件讀取時,需要將代碼與讀取文件放在同一路徑下,比如都放在桌面上。
代碼:
解法三:常規方法
直接將貪吃蛇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等軟件可以避免麻煩的編程
努力只能及格,拼命才能優秀! 加油,陌生人!
總結
以上是生活随笔為你收集整理的13行代码AC_2017年省赛C组蓝桥杯第一题 贪吃蛇长度(考查文件读取)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 25行代码AC_蓝桥杯 2017A组省赛
- 下一篇: 15行代码AC_ 【蓝桥杯】兴趣小组(解