要求是:
首先我看到这题目的想法是取到所有电池最小的使用时长,比如说题目例子里的假设十节电池,从小到大依次排序,设为a[10]
然后先让第十节电池和第九节电池......
其实这题想复杂了,只要想最后的结果就行了,从结果考虑
这道题目最终就两种结果:
(1)一节电池超级耐用,比其他所有电池加起来用的都长,结果就是总时长减掉最大的那个电池
(2)还有一种情况就是没有最长的(我不管他怎么分配,最终总能找到一种分配法,能正好把时长除以二正好用完。
#include<iostream>
#include<limits>
using namespace std;
int a[1001];
int main() {
int n;
while(cin>>n) {
int sum=0;
int max=-INT_MAX;
for(int i=1; i<=n; i++) {
cin>>a[i];
if(a[i]>max)
max=a[i];
sum+=a[i];
}
if(max>=sum-max)
printf("%.1lf\n",(sum-max)*1.0);
else
printf("%.1lf\n",sum*1.0/2);
}
return 0;
}