題目鏈接
題目大意:一個人的成績計算是舍棄5個成績中的最高分與最低分然后計算平均值,現在你知道了4個值,和一個目標值, 問第5個值最大是多少的情況下平均值可以比目標值小。
1.當4個值中的最大的三個值的平均值比目標值小的時候,無論第5個值是多大都行。
2.當4個值中的最小的三個值的平均值比目標值大的時候,無論第5個值是多小都不行。
3.所以說我們只要在最小值與次小值之間找一個符合題意的數就可以了。
PS:這題主要問題出在浮點數的判斷誤差上面,可以使用整型避免出現誤差,也可以考慮精度問題之后再進行浮點數比較。
int main() {
int arr[5];
for (int i = 0, a, b; i<5; ++i) {
scanf("%d.%d", &a, &b);
arr[i] = 100*a+b;
}
sort(arr, arr+4);
if (arr[1]+arr[2]+arr[3] <= arr[4]*3) printf("infinite\n");
else if (arr[0]+arr[1]+arr[2] > arr[4]*3) printf("impossible\n");
else {
int tmp = arr[4]*3-arr[1]-arr[2];
double ans = tmp/100.0+eps;
printf("%.2f\n", ans);
}
return 0;
}
int cmp(double k) {
if (k>eps) return 1;
else if (k<-eps) return -1;
return 0;
}
int main() {
double a[5];
for (int i = 0; i<5; ++i) scanf("%lf", &a[i]);
sort(a, a+4);
double x = 3*a[4]-a[1]-a[2];
if (cmp(x-a[0])==-1) printf("impossible\n");
else if (cmp(x-a[3])>=0) printf("infinite\n");
else printf("%.2f\n", x);
return 0;
}
