x星球的居民脾氣不太好,但好在他們生氣的時候唯一的異常舉動是:摔手機。
各大廠商也就紛紛推出各種耐摔型手機。x星球的質監局規定了手機必須經過耐摔測試,並且評定出乙個耐摔指數來,之後才允許上市流通。
x星球有很多高聳入雲的高塔,剛好可以用來做耐摔測試。塔的每一層高度都是一樣的,與地球上稍有不同的是,他們的第一層不是地面,而是相當於我們的2樓。
如果手機從第7層扔下去沒摔壞,但第8層摔壞了,則手機耐摔指數=7。
特別地,如果手機從第1層扔下去就壞了,則耐摔指數=0。
如果到了塔的最高層第n層扔沒摔壞,則耐摔指數=n
為了減少測試次數,從每個廠家抽樣3部手機參加測試。
如果已知了測試塔的高度,並且採用最佳策略,在最壞的運氣下最多需要測試多少次才能確定手機的耐摔指數呢?
輸入資料,乙個整數n(3
思路:首先考慮測試n次能支援的最大層數的關係。
我們先考慮手機只有一部的情況,因為手機只有一部為了能使手機正確測出指數,我們只能一層一層的向上測試。
(設次數為n,能支援的最大層數f(n))
因此次數與能支援的最大層數的關係為:
f(n)=n;
我們現在來考慮有兩部手機的情況,因為有兩部手機所以我們得考慮兩種情況第一種便是我選個樓層扔手機碎了的情況,那手機測試得向下走,因為手機碎了,我就只剩下1部手機以及n-1次扔手機的機會,所以我們考慮在n-1次可扔手機次數裡找到一部手機可支援的最大層數,而上面我們已經提到一部手機可扔次數與能支援的最大層數的關係為f(n)=n;
因此f(n-1)=n-1;這樣我們便把摔壞了(測試樓層下方)的最優情況求出來了。(逆向思維既然在手機只剩一部可測次數還剩n-1的情況能支援的最大層數+1便是我們兩部手機在第一次應該選得最優測試樓層。這樣便可以不用動態規劃模擬一層層的扔求出最優解)。
第二種便是我們扔後手機沒碎的情況,因為手機沒碎所以我們得向樓層上方測試,但是由於我們用過一次測試的次數,所以現在還有兩部手機以及n-1次可以測試手機的機會,所以我們便可以求出沒摔碎(測試樓層上方)的最優層數。
所以有兩部手機可測次數與能支援的最大層數的關係為:
(設次數為n,能支援的最大層數ff(n))
ff(n)=f(n-1)+1+ff(n-1)=ff(n-1)+n;(加1是加的用於測試的那一樓層)
化簡過後你會發現就是前n項的和。
我們現在來考慮三部手機的情況,三部手機的情況跟兩部手機差不多就只是測試失敗後還剩兩部手機,用二部手機與剩下的可用次數求出摔壞了(測試樓層下方)的最優情況,然後用三部手機與剩下的次數求出沒摔碎(測試樓層上方)的最優層數。
所以有三部手機可測次數與能支援的最大層數的關係為:
(設次數為n,能支援的最大層數fff(n))
fff(n)=ff(n-1)+1+fff(n-1);
到這裡我們便把三部手機的可測次數與能支援的最大層數的關係表示出來了。接下來看**。
#includeint main()
;//ff[i]兩部手機摔i次可以支援的最大層數
int fff[100]=;//fff[i]三部手機摔i次可以支援的最大層數
int i;//摔的次數
int n;
printf("----------------------------\n");
while(scanf("%d",&n)!=0)
{ i=0;
while(fff[i]
第九屆藍橋杯 耐摔指數
問題描述 星球的居民脾氣不太好,但好在他們生氣的時候唯一的異常舉動是 摔手機。各大廠商也就紛紛推出各種耐摔型手機。x星球的質監局規定了手機必須經過耐摔測試,並且評定出乙個耐摔指數來,之後才允許上市流通。x星球有很多高聳入雲的高塔,剛好可以用來做耐摔測試。塔的每一層高度都是一樣的,與地球上稍有不同的是...
藍橋杯 摔手機 耐摔指數
x星球的居民脾氣不太好,但好在他們生氣的時候唯一的異常舉動是 摔手機。各大廠商也就紛紛推出各種耐摔型手機。x星球的質監局規定了手機必須經過耐摔測試,並且評定出乙個耐摔指數來,之後才允許上市流通。x星球有很多高聳入雲的高塔,剛好可以用來做耐摔測試。塔的每一層高度都是一樣的,與地球上稍有不同的是,他們的...
藍橋杯第九屆決賽
x星球的鈔票的面額只有 100元,5元,2元,1元,共4種。小明去x星旅遊,他手裡只有2張100元的x星幣,太不方便,恰好路過x星銀行就去換零錢。小明有點強迫症,他堅持要求200元換出的零鈔中2元的張數剛好是1元的張數的10倍,剩下的當然都是5元面額的。銀行的工作人員有點為難,你能幫助算出 在滿足小...