九度OJ —— 1002

来源:互联网 发布:实况2017数据 编辑:程序博客网 时间:2024/05/18 01:57

题目描述:
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, G1, G2, G3, and GJ
1. 若|G1-G2|<=T grade=(G1+G2)/2
2. 若|G1-G2|>T,此时要用到G3
3. 当|g1-g3|和|g2-g3|有且只有一个小于等于T时,grade=(g3+接近G3 的那个数)/2
4. 当|g1-g3|和|g2-g3|都小于T时,grade等于三个数中最大的
5. 当|g1-g3|和|g2-g3|都大于T时,grade等于GJ

#include <iostream>#include <math.h>#include <iomanip>#include <stdio.h>#include <stdlib.h>using namespace std;int MaxNum(int a,int b,int c){    int max;    max=a>b?a:b;    return max>c?max:c;}int main(){    int p,t,g1,g2,g3,gj;    while(cin>>p>>t>>g1>>g2>>g3>>gj){        double grade;        if(abs(g1-g2)<=t)            grade=(g1+g2)/2.0;        else if(abs(g1-g3)<=t && abs(g2-g3)>t)            grade=(g3+g1)/2.0;        else if(abs(g2-g3)<=t && abs(g1-g3)>t)            grade=(g3+g2)/2.0;        else if(abs(g1-g3)<=t && abs(g2-g3)<=t)            grade=MaxNum(g1,g2,g3);        else if(abs(g1-g3)>t && abs(g2-g3)>t)            grade=gj;         cout << setiosflags(ios::fixed) << setprecision(1)<<grade<<endl;    }    return 0;} 

题目很简单,但有几个注意的点:
1. grade是浮点数,在除2时要写为除2.0
2. grade输出要保留一位小数,C++中保留一位小数需要在cout写上cout << setiosflags(ios::fixed) << setprecision(1) ,头文件#include <iomanip>
3. 在使用abs()函数时,开始只加了#include <math.h>,发现在提交时反馈 ‘abs’ was not declared in this scope,后来发现还要加上#include <stdlib.h>

原创粉丝点击