Problem【★】
最终成绩为五个成绩去掉最好和最差两个成绩剩下三个成绩的平均数,现在Claire已经有了四个成绩,给定他听得比赛所需的最小最终成绩,求他第五次成绩最差是多少时能赢得比赛,或者无论如何都能赢得比赛,或不可能赢得比赛。
Solution【★★】
最终成绩一定在四个成绩最大三个的平均数和最小三个的平均数之间,可用这个边界判断后两种情况,然后用目标成绩和四个里面中间的两个成绩反推第五次最差成绩。会产生精度问题,需要按位当整数读入,放大100倍计算。
Code【★】
#include <iostream>
#include <algorithm>
#include <cstdio>
using namespace std;
const double eps=1e-5;
int a[10],pos,x,y,z;
double b[10],ac;
int main()
{
for(int i=1;i<=4;i++)
{
scanf("%d.%1d%1d",&x,&y,&z);
a[i]=x*100+y*10+z;
}
sort(a+1,a+5);
scanf("%d.%1d%1d",&x,&y,&z);
ac=x*100+y*10+z;
if(a[2]+a[3]+a[4]<=ac*3)
{
cout<<"infinite";
return 0;
}
int l=a[1],r=a[4];
for(int i=r-1;i>=l;i--)
{
if(i+a[2]+a[3]<=ac*3)
{
printf("%.2lf",(double)i/100);
return 0;
}
}
cout<<"impossible";
return 0;
}