题目描述Mr. Chips\texttt{Mr. Chips}Mr. Chips有一套简单的评分方案便于自动计算。你需要编写程序读取学生的成绩、奖励分数和出勤记录计算学生的最终成绩并输出班级的平均绩点avg grd pnt。Mr. Chips\texttt{Mr. Chips}Mr. Chips的评分规则如下所有测验满分100100100分成绩在000到100100100之间。如果测验次数超过222次则去掉每个学生的最低一次成绩后再计算平均分。计算每个学生的平均分后计算班级的平均分mean和标准差sd。若计算出的标准差小于111则用111代替标准差用于等级划分。等级划分标准未调整前平均分≥\ge≥平均分标准差A平均分≥\ge≥平均分 且平均分标准差B平均分≥\ge≥平均分−-−标准差 且平均分C平均分≤\le≤平均分−-−标准差D奖励分数调整每222个奖励分平均分提高333个百分点向上取整到十分位。例如111个奖励分不提高444或555个奖励分提高666个百分点以此类推。出勤调整每444次缺勤降低一个字母等级A→B→C→D→F。如果全勤缺勤000次则提高一个字母等级不能高于A。所有计算过程中Mr. Chips\texttt{Mr. Chips}Mr. Chips总是将结果四舍五入到十分位。平均绩点计算规则A计444分B计333分C计222分D计111分F计000分。总绩点除以学生数即为班级平均绩点。输入格式第一行包含整数NNN1≤N≤101 \le N \le 101≤N≤10表示Mr. Chips\texttt{Mr. Chips}Mr. Chips的班级数量。每个班级的第一行包含两个整数SSS和TTTSSS学生数1S311 S 311S31TTT测验次数1T111 T 111T11接下来SSS行每行表示一个学生前TTT个整数为各次测验成绩0∼1000 \sim 1000∼100接着一个整数为奖励分数最后一个整数为缺勤次数输出格式第一行输出MAKING THE GRADE OUTPUT。接下来NNN行每行输出一个班级的平均绩点保留一位小数。最后一行输出END OF OUTPUT。样例输入3 3 2 100 50 2 5 60 60 17 1 20 10 0 5 5 100 80 90 80 90 0 0 80 80 80 80 0 0 50 50 50 50 0 0 100 100 20 20 20 0 0 30 30 30 30 0 0 10 4 79 56 59 89 4 5 100 89 96 79 6 2 80 80 80 76 1 3 76 76 76 76 5 4 58 78 67 75 4 0 100 96 100 95 1 2 47 49 46 45 0 5 67 98 59 87 5 5 23 45 52 54 2 7 78 75 79 79 3 3输出MAKING THE GRADE OUTPUT 3.0 3.2 2.4 END OF OUTPUT题目分析本题的评分流程较为复杂涉及多个步骤原始平均分计算若T2T 2T2则去掉最低分后求平均否则直接平均。结果需四舍五入到十分位。班级统计量计算所有学生原始平均分的均值和标准差。若标准差1 11则视为111。奖励分调整每222个奖励分增加333个百分点。调整后的平均分仍要四舍五入到十分位。初始等级划分根据调整后的平均分与均值、标准差的关系确定A/B/C/D。出勤调整每缺勤444次降一级全勤缺勤000次升一级且等级不能超出A到F范围。绩点计算将最终等级转换为绩点A:4, B:3, C:2, D:1, F:0求和后除以学生数结果保留一位小数。关键细节所有“平均分”计算原始平均、奖励调整后平均都需要四舍五入到十分位。标准差公式sd∑(xi−mean)2S\textit{sd} \sqrt{\frac{\sum (x_i - \textit{mean})^2}{S}}sdS∑(xi−mean)2。奖励分调整公式avg′avg3×⌊bouns/2⌋\textit{avg} \textit{avg} 3 \times \lfloor \textit{bouns} / 2 \rflooravg′avg3×⌊bouns/2⌋。等级调整时注意边界不能低于F绩点000不能高于A绩点444。代码实现// Making the Grade// UVa ID: 381// Verdict: Accepted// Submission Date: 2016-07-04// UVa Run Time: 0.000s//// 版权所有C2016邱秋。metaphysis # yeah dot net#includebits/stdc.husingnamespacestd;structstudent{doubleaverage;intbouns,absences,grade;};doubleroundToTenth(doublenumber){return(int)(number*10.00.5)/10.0;}intmain(intargc,char*argv[]){ios::sync_with_stdio(false);vectorstudentstudents;intN,S,T;cinN;coutMAKING THE GRADE OUTPUTendl;for(inti1;iN;i){cinST;students.clear();for(intj1;jS;j){doublelowest100.0,sumOfScores0.0,score;for(intk1;kT;k){cinscore;sumOfScoresscore;lowestmin(lowest,score);}student aStudent;cinaStudent.bounsaStudent.absences;if(T2)aStudent.averageroundToTenth((sumOfScores-lowest)/(T-1));elseaStudent.averagesumOfScores/T;students.push_back(aStudent);}doublesumOfPoints0.0,mean,sd;for(inti0;istudents.size();i)sumOfPointsstudents[i].average;meanroundToTenth(sumOfPoints/S);for(inti0;istudents.size();i)sdpow(students[i].average-mean,2);sdroundToTenth(sqrt(sd/S));doublesumOfGrade0;for(inti0;istudents.size();i){students[i].averageroundToTenth(students[i].average3.0*(students[i].bouns/2));if(students[i].average(meansd))students[i].grade4;elseif(students[i].averagemean)students[i].grade3;elseif(students[i].average(mean-sd))students[i].grade2;elsestudents[i].grade1;if(students[i].absences0)students[i].grade-students[i].absences/4;elsestudents[i].grade;if(students[i].grade0)students[i].grade0;elseif(students[i].grade4)students[i].grade4;sumOfGradestudents[i].grade;}coutfixedsetprecision(1)(sumOfGrade/S)endl;}coutEND OF OUTPUTendl;return0;}
UVa 381 Making the Grade
题目描述Mr. Chips\texttt{Mr. Chips}Mr. Chips有一套简单的评分方案便于自动计算。你需要编写程序读取学生的成绩、奖励分数和出勤记录计算学生的最终成绩并输出班级的平均绩点avg grd pnt。Mr. Chips\texttt{Mr. Chips}Mr. Chips的评分规则如下所有测验满分100100100分成绩在000到100100100之间。如果测验次数超过222次则去掉每个学生的最低一次成绩后再计算平均分。计算每个学生的平均分后计算班级的平均分mean和标准差sd。若计算出的标准差小于111则用111代替标准差用于等级划分。等级划分标准未调整前平均分≥\ge≥平均分标准差A平均分≥\ge≥平均分 且平均分标准差B平均分≥\ge≥平均分−-−标准差 且平均分C平均分≤\le≤平均分−-−标准差D奖励分数调整每222个奖励分平均分提高333个百分点向上取整到十分位。例如111个奖励分不提高444或555个奖励分提高666个百分点以此类推。出勤调整每444次缺勤降低一个字母等级A→B→C→D→F。如果全勤缺勤000次则提高一个字母等级不能高于A。所有计算过程中Mr. Chips\texttt{Mr. Chips}Mr. Chips总是将结果四舍五入到十分位。平均绩点计算规则A计444分B计333分C计222分D计111分F计000分。总绩点除以学生数即为班级平均绩点。输入格式第一行包含整数NNN1≤N≤101 \le N \le 101≤N≤10表示Mr. Chips\texttt{Mr. Chips}Mr. Chips的班级数量。每个班级的第一行包含两个整数SSS和TTTSSS学生数1S311 S 311S31TTT测验次数1T111 T 111T11接下来SSS行每行表示一个学生前TTT个整数为各次测验成绩0∼1000 \sim 1000∼100接着一个整数为奖励分数最后一个整数为缺勤次数输出格式第一行输出MAKING THE GRADE OUTPUT。接下来NNN行每行输出一个班级的平均绩点保留一位小数。最后一行输出END OF OUTPUT。样例输入3 3 2 100 50 2 5 60 60 17 1 20 10 0 5 5 100 80 90 80 90 0 0 80 80 80 80 0 0 50 50 50 50 0 0 100 100 20 20 20 0 0 30 30 30 30 0 0 10 4 79 56 59 89 4 5 100 89 96 79 6 2 80 80 80 76 1 3 76 76 76 76 5 4 58 78 67 75 4 0 100 96 100 95 1 2 47 49 46 45 0 5 67 98 59 87 5 5 23 45 52 54 2 7 78 75 79 79 3 3输出MAKING THE GRADE OUTPUT 3.0 3.2 2.4 END OF OUTPUT题目分析本题的评分流程较为复杂涉及多个步骤原始平均分计算若T2T 2T2则去掉最低分后求平均否则直接平均。结果需四舍五入到十分位。班级统计量计算所有学生原始平均分的均值和标准差。若标准差1 11则视为111。奖励分调整每222个奖励分增加333个百分点。调整后的平均分仍要四舍五入到十分位。初始等级划分根据调整后的平均分与均值、标准差的关系确定A/B/C/D。出勤调整每缺勤444次降一级全勤缺勤000次升一级且等级不能超出A到F范围。绩点计算将最终等级转换为绩点A:4, B:3, C:2, D:1, F:0求和后除以学生数结果保留一位小数。关键细节所有“平均分”计算原始平均、奖励调整后平均都需要四舍五入到十分位。标准差公式sd∑(xi−mean)2S\textit{sd} \sqrt{\frac{\sum (x_i - \textit{mean})^2}{S}}sdS∑(xi−mean)2。奖励分调整公式avg′avg3×⌊bouns/2⌋\textit{avg} \textit{avg} 3 \times \lfloor \textit{bouns} / 2 \rflooravg′avg3×⌊bouns/2⌋。等级调整时注意边界不能低于F绩点000不能高于A绩点444。代码实现// Making the Grade// UVa ID: 381// Verdict: Accepted// Submission Date: 2016-07-04// UVa Run Time: 0.000s//// 版权所有C2016邱秋。metaphysis # yeah dot net#includebits/stdc.husingnamespacestd;structstudent{doubleaverage;intbouns,absences,grade;};doubleroundToTenth(doublenumber){return(int)(number*10.00.5)/10.0;}intmain(intargc,char*argv[]){ios::sync_with_stdio(false);vectorstudentstudents;intN,S,T;cinN;coutMAKING THE GRADE OUTPUTendl;for(inti1;iN;i){cinST;students.clear();for(intj1;jS;j){doublelowest100.0,sumOfScores0.0,score;for(intk1;kT;k){cinscore;sumOfScoresscore;lowestmin(lowest,score);}student aStudent;cinaStudent.bounsaStudent.absences;if(T2)aStudent.averageroundToTenth((sumOfScores-lowest)/(T-1));elseaStudent.averagesumOfScores/T;students.push_back(aStudent);}doublesumOfPoints0.0,mean,sd;for(inti0;istudents.size();i)sumOfPointsstudents[i].average;meanroundToTenth(sumOfPoints/S);for(inti0;istudents.size();i)sdpow(students[i].average-mean,2);sdroundToTenth(sqrt(sd/S));doublesumOfGrade0;for(inti0;istudents.size();i){students[i].averageroundToTenth(students[i].average3.0*(students[i].bouns/2));if(students[i].average(meansd))students[i].grade4;elseif(students[i].averagemean)students[i].grade3;elseif(students[i].average(mean-sd))students[i].grade2;elsestudents[i].grade1;if(students[i].absences0)students[i].grade-students[i].absences/4;elsestudents[i].grade;if(students[i].grade0)students[i].grade0;elseif(students[i].grade4)students[i].grade4;sumOfGradestudents[i].grade;}coutfixedsetprecision(1)(sumOfGrade/S)endl;}coutEND OF OUTPUTendl;return0;}