機械人繁殖

2021-08-01 13:54:43 字數 1445 閱讀 1326

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 , 不能通過工程設定而省略常用標頭檔案。

提交時,注意選擇所期望的編譯器型別。

思路 :仔細觀察題目後你會發現題目和斐波那契數列很像 

如果不發射機械人 :機械人數量變化是   x      x+2x     x+2x+4x       x+2x+4x+8x    ……      (2^(n+1)-1)x

0年     1年           2年              3年                                   n年

也就是說當你知道機械人總數後   除以(2^(n+1)-1)   就能得到 初始的機械人數   

要注意的是    給的機械人數量 是 每年發出乙個新機械人後的數量  所以要求出 到底發出送了多少機械人  (注意:發出去的機械人也可以繁殖 這些數量同樣要加上   )

聽起來很麻煩 其實 就乙個公式的事  應為是有規律的  :

第一年 發出的機械人變成了   2^(n)-1    個

第2年 發出的機械人變成了   2^(n-1)-1    個

第3年 發出的機械人變成了   2^(n-2)-1    個

第n-1年 發出的機械人變成了   2^2 - 1 個

第n年 發出的機械人變成了    2^1 -1 個

求一下和   就是 ( 2^(n+1)-1)-1-n       ;(應為沒有2^0  說以多加個 1 要減去)

化簡一下就是 2^(n+1)-n-2;

# include

# include

int main(void)

機械人繁殖

x星系的機械人可以自動複製自己。它們用1年的時間可以複製出2個自己,然後就失去複製能力。每年x星系都會選出1個新出生的機械人發往太空。也就是說,如果x星系原有機械人5個,1年後總數是 5 9 14 2年後總數是 5 9 17 31 如果已經探測經過n年後的機械人總數s,你能算出最初有多少機械人嗎?資...

機械人繁殖

x星系的機械人可以自動複製自己。它們用1年的時間可以複製出2個自己,然後就失去複製能力。每年x星系都會選出1個新出生的機械人發往太空。也就是說,如果x星系原有機械人5個,1年後總數是 5 9 14 2年後總數是 5 9 17 31 如果已經探測經過n年後的機械人總數s,你能算出最初有多少機械人嗎?資...

機械人繁殖 列舉

題目描述 x星系的機械人可以自動複製自己。它們用1年的時間可以複製出2個自己,然後就失去複製能力。每年x星系都會選出1個新出生的機械人發往太空。也就是說,如果x星系原有機械人5個,1年後總數是 5 9 14 2年後總數是 5 9 17 31 如果已經探測經過n年後的機械人總數s,你能算出最初有多少機...