题目1002:Grading

这道题的大概意思事:考试评分的过程:首先输入一个成绩P和允许误差T,然后再让G1,G2评分,如果G1和G2评分之间的误差小于T,则G1和G2之间的平均值就是最终的分数;如果G1和G2之间的分数差大于T,则再让G3评分;如果G3是和G1或者G2中间的某一个之间的误差小于T,则最终的结果取G3和该值的平均值;如果G3同时和G1和G2之间的误差都小于T,最终的结果则取G1,G2,G3的最大值;如果G3和G1与G2之间的误差都大于T,则再让另外一个人GJ打分作为最后的分数。

依次输入:P,T,G1,G2,G3,GJ

输出最终的成绩

 1 #include<iostream>
 2 #include <stdlib.h>
 3 #include <iomanip>
 4 #include<math.h>
 5 using namespace std;
 6 int main(){
 7     int P,T,G1,G2,G3,GJ;
 8     double grade;
 9     while(cin>>P){
10         cin>>T>>G1>>G2>>G3>>GJ;
11         if(T<0 || T>=P || G1<0 || G1>P || G2<0 || G2>P  || G3<0 || G3>P || GJ<0 || GJ>P){  
12                 continue;
13         }
14         if(abs(G1-G2)<=T){
15             grade=(double)(G1+G2)/2;
16         }else if(abs(G1-G3)<=T && abs(G2-G3)<=T){
17             grade=G1>G3?(double)G1:(double)G3;
18             grade=grade>G2?grade:(double)G2;
19         }else if(abs(G1-G3)<=T && abs(G2-G3)>T){
20             grade=(double)(G1+G3)/2;
21         }else if(abs(G2-G3)<=T && abs(G1-G3)>T){
22             grade=(double)(G2+G3)/2;
23         }else {
24             grade=(double)GJ;
25         }
26         cout <<setiosflags(ios::fixed);
27         cout<<setprecision(1)<<grade<<endl;
28     }
29     return 0;
30 } 
31 /**************************************************************
32     Problem: 1002
33     User: hg2013211626
34     Language: C++
35     Result: Accepted
36     Time:10 ms
37     Memory:1520 kb
38 ****************************************************************/

这道题™不难,只要理清思路就很容易做出来,但是仍有两点要注意:

1.结果要保留一位小数,在C++中,结果保留一位小数是通过以下三句代码实现的:

 #include <iomanip>  //引入头部
cout <<setiosflags(ios::fixed);
cout<<setprecision(1)<<grade<<endl;
这个须记住
2.我这个程序在devC++中提交成功,但往在线测评系统中提交编译失败,搞了老半天又请教学长才成功,要在头文件中加上
#include <stdlib.h>
就可以了,至于为什么,我也不知道。。。。。。。。。。
 
原文地址:https://www.cnblogs.com/huanggen/p/5323223.html