题目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>
就可以了,至于为什么,我也不知道。。。。。。。。。。