描述
为成千上万的研究生入学考试打分是一项艰苦的工作。更难的是设计一个过程,使结果尽可能公平。一种方法是将每个考试问题分配给3个独立的专家。如果双方意见不一致,就请一位法官做出最终裁决。现在你要写一个程序来帮助这个过程。对于每个问题,都有一个满分P和一个公差T(<P)。
- 首先一个问题将分配给2名专家,获得G1和G2。如果差异在公差范围内,即|G1 - G2|≤T,则该问题的等级为G1和G2的平均值。
- 如果差异超过T,第三位专家将给出G3。
- 如果G3与G1或G2在公差范围内,但不是两者都在公差范围内,那么这个问题的等级将是G3和最接近的等级的平均值。
- 如果G3与G1和G2都在公差范围内,则该问题的等级将是三个等级中的最大值。
- 如果G3不在G1和G2的公差范围内,裁判将给出最终等级GJ。
输入描述:
每个输入文件可以包含多个测试用例。每个case占用一行,包含6个正整数:P、T、G1、G2、G3和GJ,如题中所述。保证所有等级都是有效的,即在区间[0,P]内。
输出描述:
对于每个测试用例,您应该在一行中输出问题的最终等级。答案必须精确到小数点后1位。
示例1
输入:
20 2 15 13 10 18
输出:
14.0
#define _CRT_SECURE_NO_WARNINGS 1
#include <bits/stdc++.h>
using namespace std;
int main() {
int perfect, tolerance, grade1, grade2, grade3, gradeJudge;
while (cin >> perfect >> tolerance >> grade1 >> grade2 >> grade3 >> gradeJudge)
{
double answer;
if (abs(grade1 - grade2) <= tolerance)
answer = (grade1 + grade2) / 2.0;
else if (abs(grade1 - grade3) <= tolerance && abs(grade2 - grade3) > tolerance)
answer = (grade1 + grade3) / 2.0;
else if (abs(grade2 - grade3) <= tolerance && abs(grade1 - grade3) > tolerance)
answer = (grade2 + grade3) / 2.0;
else if (abs(grade1 - grade3) <= tolerance && abs(grade2 - grade3) > tolerance)
answer = max(max(grade1, grade2), grade3);
else
answer = gradeJudge;
printf("%.1f\n", answer);
}
return 0;
}