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,你能算出最初有多少機...