信息学奥赛一本通(1229:电池的寿命)
1229:電池的壽命
時間限制: 1000 ms ??? ??? 內(nèi)存限制: 65536 KB
提交數(shù): 6005 ??? 通過數(shù): 3338
【題目描述】
小S新買了一個掌上游戲機,這個游戲機由兩節(jié)5號電池供電。為了保證能夠長時間玩游戲,他買了很多5號電池,這些電池的生產(chǎn)商不同,質(zhì)量也有差異,因而使用壽命也有所不同,有的能使用5個小時,有的可能就只能使用3個小時。顯然如果他只有兩個電池一個能用5小時一個能用3小時,那么他只能玩3個小時的游戲,有一個電池剩下的電量無法使用,但是如果他有更多的電池,就可以更加充分地利用它們,比如他有三個電池分別能用3、3、5小時,他可以先使用兩節(jié)能用3個小時的電池,使用半個小時后再把其中一個換成能使用5個小時的電池,兩個半小時后再把剩下的一節(jié)電池?fù)Q成剛才換下的電池(那個電池還能用2.5個小時),這樣總共就可以使用5.5個小時,沒有一點浪費。
現(xiàn)在已知電池的數(shù)量和電池能夠使用的時間,請你找一種方案使得使用時間盡可能的長。
【輸入】
輸入包含多組數(shù)據(jù)。每組數(shù)據(jù)包括兩行,第一行是一個整數(shù)N(2≤N≤1000),表示電池的數(shù)目,接下來一行是N個正整數(shù)表示電池能使用的時間。
【輸出】
對每組數(shù)據(jù)輸出一行,表示電池能使用的時間,保留到小數(shù)點后1位。
【輸入樣例】
2 3 5 3 3 3 5【輸出樣例】
3.0 5.5【分析】
? ? ? ? 首先找出電池時間最長的那個電池max,然后將其和剩余的電池分開,如果max電池的時間比剩余的電池時間長度之和都長,那么游戲機能玩的時間就是剩余電池時間之和,否則,max就整合其他電池,使其為總和的一半,游戲機能玩的時間就是max。所以,求解步驟為:
(1)求最大值max,以及總電量sum
(2)sum-max?< max,說明 max > 其它電池時間之和,ans = sum-max
(3)sum-max?> max,說明 max < 其它電池時間之和,ans = sum/2
【參考代碼】
#include <stdio.h> #define N 1010 int a[N]; int main() {int i,n,max,s;while(scanf("%d",&n)!=EOF){s=0;for(i=0;i<n;i++){scanf("%d",&a[i]);s+=a[i];}max=a[0];for(i=0;i<n;i++){if(a[i]>max)max=a[i];}if((s-max)<max)printf("%.1lf\n",(s-max)*1.0);elseprintf("%.1lf\n",s/2.0);}return 0; }http://ybt.ssoier.cn:8088/problem_show.php?pid=1229
總結(jié)
以上是生活随笔為你收集整理的信息学奥赛一本通(1229:电池的寿命)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 信息学奥赛一本通(1162:字符串逆序)
- 下一篇: 信息学奥赛一本通 1067:整数的个数