SHAOXIAOJ正在加载中...

1140: Grading(已翻译)

金币值:2 定数:1 时间限制:1.000 s 内存限制:32 M
正确:2 提交:2 正确率:100.00% 命题人:

题目描述

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.

    给成千上万的研究生入学考试评分是一项艰苦的工作。要想设计一个程序使结果尽可能公平就更难了。有一种方法是将每个考题分配给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。

输入格式

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].

每个输入数据可能包含一个以上的测试用例。

每种情况占一行,包含6个正整数:P、T、G1、G2、G3和
GJ,如题所述。保证所有等级都有效,即在[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来存储浮点数的话)