培训网站建设学校,互联网怎样赚钱,织梦做的网站打包在dw修改,东莞智通人才招聘网下载思路#xff1a;
首先#xff0c;我们观察发现#xff1a;由于每枚电池的使用时间不同#xff0c;而我们又要减少浪费才能使所有电池加起来用得最久#xff0c;不难发现#xff1a;当n2时#xff0c;输出较小值。
第一步#xff1a;将电池分为两组#xff0c;使两组…思路
首先我们观察发现由于每枚电池的使用时间不同而我们又要减少浪费才能使所有电池加起来用得最久不难发现当n2时输出较小值。
第一步将电池分为两组使两组电池的总使用时长的差值尽可能小。 第二步如果总时长更长的分组中有多于1个电池那么取出这一组中的一些电池运行游戏机消耗其中一些电池的电量使得两组电池的使用时长相等。 代码解释
输入处理借助while (scanf(%d, n) ! EOF)持续读取每组数据的电池数量n。电池数据读取用数组a来存储每个电池的使用时长同时在读取时计算总时长sum并找出使用时长最长的电池maxn。判断最长使用时间 如果除最长电池外其他电池总时长小于最长电池时长那么最长使用时间就是其他电池的总时长。如果除最长电池外其他电池总时长大于等于最长电池时长那么最长使用时间为所有电池总时长的一半。 输出结果以保留一位小数的格式输出结果。
其实对于每一组数据只要判断最大的那个数是不是比其余的数的和都要大如果成立的话那当然就是剩下的所有电池与最大的电池车轮战最大为n-1个数的和如果不成立的话那么最大就是n个数的和的一半也就是说电池是一定可以全部用完的。
代码
#include bits/stdc.h
using namespace std;
const int N1e55;
int a[N];
int main(){int n;while(scanf(%d,n)!EOF) {int maxn-1,sum0;for(int i1;in;i){cina[i];suma[i]; if(maxna[i]) maxna[i]; }if((sum-maxn)maxn){printf(%.1f\n,(sum-maxn)*1.0);}else{printf(%.1f\n,(sum-maxn-maxn)*1.0/2maxn);}}return 0;
}