问题 1990 --Grading

1990: Grading

时间限制: 1 Sec  内存限制: 32 MB
提交: 41  解决: 15
[提交][状态][讨论版][数据上传:][下载FPS1元][下载测试数据1元][20kb]

题目描述

Grading hundreds of thousands of Graduate Entrance Exams is a hard work. It is even harder to design a process to make the results as fair as possible. One way is to assign each exam problem to 3 independent experts. If they do not agree to each other, a judge is invited to make the final decision. Now you are asked to write a program to help this process.
    For each problem, there is a full-mark P and a tolerance T(<P) given. The grading rules are:
    • A problem will first be assigned to 2 experts, to obtain G1 and G2. If the difference is within the tolerance, that is, if |G1 - G2| ≤ T, this problem's grade will be the average of G1 and G2.
    • If the difference exceeds T, the 3rd expert will give G3.
    • If G3 is within the tolerance with either G1 or G2, but NOT both, then this problem's grade will be the average of G3 and the closest grade.
    • If G3 is within the tolerance with both G1 and G2, then this problem's grade will be the maximum of the three grades.
    • If G3 is within the tolerance with neither G1 nor G2, a judge will give the final grade GJ.


输入

Each input file may contain more than one test case.
Each case occupies a line containing six positive integers: P, T, G1, G2, G3, and

GJ, as described in the problem. It is guaranteed that all the grades are valid, that is, in the interval [0, P].


输出

For each test case you should output the final grade of the problem in a line. The answer must be accurate to 1 decimal place.


样例输入

20 2 15 13 10 18

样例输出

14.0

提示



如果能够耐心读懂本题题目,实际上本题并不难。题目中需要求的是打分问题。首先给定的是总分P和一个允许的差额T。然后给定最先打出的两个分数G1G2


1)如果G1G2的差值不大于T,则最终分数为G1G2的平均分;


2)否则给出第三个分数G3,计算G3与前面两个分数的差值。如果两个差值都不大于T,则最终结果为3个分数中的最大值;


3)如果只有一个差值不大于T,则最终结果为G3与那个同G3差值不大于T的分数的平均分;


4)如果两个差值都大于T,则给定第四个分数GJ,最终成绩就为GJ


题目本身不难,我就不过多解释了,需要注意的有三点:


1)如何读入数据,由于测试数据有多组,都是浮点数。那么可以先读取一个浮点数判断是否读到了文件结尾,如果没有读到文件结尾则说明还有一组数据,则读入剩下的数据。或者直接将六个浮点数一起读入,判断是否读到文件结尾;


2)差值是非零实数,在不知道孰大孰小的情况下做差可以使用math.h中的fabs函数。或者做个判断。


3)结果需要保留一位小数,可以使用


printf("%.1lf");


来输出,第一个是数字“1”,第二个是小写“L”。(如果使用double来存储浮点数的话)


来源

[提交][状态]