藍橋杯競賽題目:”機器人繁殖“解析及題解

山有木xi發表於2019-05-02

標題:機器人繁殖
X星系的機器人可以自動複製自己。它們用1年的時間可以複製出2個自己,然後就失去複製能力。
每年X星系都會選出1個新出生的機器人發往太空。也就是說,如果X星系原有機器人5個,
1年後總數是:5 + 9 = 14
2年後總數是:5 + 9 + 17 = 31
如果已經探測經過n年後的機器人總數s,你能算出最初有多少機器人嗎?
資料格式:
輸入一行兩個數字n和s,用空格分開,含義如上。n不大於100,s位數不超過50位。
要求輸出一行,一個整數,表示最初有機器人多少個。
例如:
使用者輸入:
2 31
則程式應該輸出:
5
再例如:
使用者輸入:
97 2218388550399401452619230609499
則程式應該輸出:
8
資源約定:
峰值記憶體消耗 < 512M
CPU消耗  < 1000ms

請嚴格按要求輸出,不要畫蛇添足地列印類似:“請您輸入...” 的多餘內容。
所有程式碼放在同一個原始檔中,除錯透過後,複製提交該原始碼。
注意: main函式需要返回0
注意: 只使用ANSI C/ANSI C++ 標準,不要呼叫依賴於編譯環境或作業系統的特殊函式。
注意: 所有依賴的函式必須明確地在原始檔中 #include <xxx>, 不能透過工程設定而省略常用標頭檔案。
提交時,注意選擇所期望的編譯器型別。

-------------------------------------------------------------------------------------------------------------------------------------------------------------------

這類演算法題目,看起來不難,但是實際程式設計時,會發現容易被卡住,有些地方跳不出去

那麼,接下來,我會為各位解釋這類題目的幾種演算法

第一種:找規律

其實規律不難找出

可以看出來,按照這個規律慢慢推算就可以得出答案

接下來把公式用程式碼寫出即可。

第二種:簡單粗暴法

因為題目給出的是,N年和S個機器人,求的是最初的機器人個數

而在C語言中,while()迴圈中,當括號裡面的數字為0時預設跳出迴圈

那麼就可以把1~n/2中間的數字都代進去試一遍,看看誰符合條件

為什麼是n/2呢,因為題目要求S要小於50位數,而直接代入n會導致數字太大

接下來就可以,用for迴圈逐個代入1~n然後用while來迴圈選出符合條件的數字,找到以後用break跳出。

第三種:遞迴法

思路同上,只不過程式碼更短更簡潔。


最後,其實演算法類的題目做起來很有意思,解題的過程會枯燥,會無趣,但是坐在那裡一個下午,一個晚上,一個週末解出題目後的快感,也是酣暢淋漓的。




來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69917874/viewspace-2643121/,如需轉載,請註明出處,否則將追究法律責任。

相關文章