藍橋杯-機器繁殖 第6屆C語言C組決賽第4題

題目敘述:c++

標題:機器人繁殖函數

X星系的機器人能夠自動複製本身。它們用1年的時間能夠複製出2個本身,而後就失去複製能力。
每一年X星系都會選出1個新出生的機器人發往太空。也就是說,若是X星系原有機器人5個,
1年後總數是:5 + 9 = 14
2年後總數是:5 + 9 + 17 = 31測試

若是已經探測通過n年後的機器人總數s,你能算出最初有多少機器人嗎?spa

數據格式:操作系統

輸入一行兩個數字n和s,用空格分開,含義如上。n不大於100,s位數不超過50位。調試

要求輸出一行,一個整數,表示最初有機器人多少個。內存

例如:
用戶輸入:
2 31ci

則程序應該輸出:
5資源

再例如:
用戶輸入:
97 2218388550399401452619230609499編譯器

則程序應該輸出:
8

資源約定:
峯值內存消耗 < 512M
CPU消耗 < 1000ms


請嚴格按要求輸出,不要多此一舉地打印相似:「請您輸入...」 的多餘內容。

全部代碼放在同一個源文件中,調試經過後,拷貝提交該源碼。

注意: main函數須要返回0
注意: 只使用ANSI C/ANSI C++ 標準,不要調用依賴於編譯環境或操做系統的特殊函數。
注意: 全部依賴的函數必須明確地在源文件中 #include <xxx>, 不能經過工程設置而省略經常使用頭文件。

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

 

問題分析:不難發現該題是一道數學題 找到規律就能夠了

咱們能夠假設起始的機器人數量爲x 

年份及對應數量以下表示:

1: x+2x-1 =3x-1 = (2^2-1)(x-1)+2

2:   x+2x-1+2(2x-1)-1 =7x-4 =(2^3-1)(x-1)+3

3:   x+2x-1+2(2x-1)-1+2(2(2x-1)-1)-1 = 15x-11 =(2^4-1)(x-1)+4

........

依次類推,第n年的數量:sum=(2^(n+1)-1)(x-1)+n+1 

進一步化簡能夠獲得 x=(sum-n-1)/(2^(n+1)-1)+1

獲得規律後直接敲代碼就好了,比較簡短,測試可AC

C++代碼以下:

#include<bits/stdc++.h>
using namespace std;
int main(){
int n; double sum; //這裏sum值須要用double存儲 由於題中要求s不超過50位,較大
cin>>n>>sum;

double p=pow(2,n+1);
int x=(sum-n-1)/(p-1)+1;
cout<<x;
return 0;
}

相關文章
相關標籤/搜索