玩命加载中 . . .

Grading


http://t.cn/E9rDPSq

描述

为成千上万的研究生入学考试打分是一项艰苦的工作。更难的是设计一个过程,使结果尽可能公平。一种方法是将每个考试问题分配给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;
}

文章作者: Jack Tim
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Jack Tim !
评论
  目录