1 条题解
-
0
分析:
整体思路是对多组学生成绩数据进行处理。对于每组数据,先计算每个学生的平均成绩,再根据额外加分进行调整。接着算出所有学生平均成绩的均值和标准差,依据调整后的成绩与均值、标准差的关系为每个学生评定学分,并考虑缺勤情况对学分进行扣除。最后计算该组学生的平均学分并输出。
解题思路:
1.平均成绩计算:针对每个学生,先算出所有测试成绩的总和,若测试次数大于 2 次,就去掉最低分,再计算平均成绩。 成绩调整:在平均成绩的基础上加上额外加分的相应数值。
2.统计分析:算出所有学生平均成绩的均值和标准差。 学分评定:按照调整后的成绩与均值、标准差的关系为每个学生评定初始学分,同时依据缺勤情况对学分进行扣除。若缺勤次数为 0 且调整后成绩小于均值加标准差,额外加 1 学分。
3.结果输出:计算该组学生的平均学分并输出。
实现步骤
1.输入处理: 读取班级数量. 对每个班级:读取学生数量和考试次数. 对每个学生:读取考试成绩、额外加分和缺勤次数.
2.原始平均分计算: 排序考试成绩(当考试次数 > 2 时) 计算平均分并保留一位小数
3.班级统计计算: 计算班级所有学生的平均分总和. 计算班级平均分. 计算班级标准差.
4.初始绩点确定: 根据调整后平均分与班级统计数据的关系确定初始绩点.
5.绩点调整: 根据缺勤次数调整每个学生的绩点.
6.输出结果: 计算并输出班级平均绩点(保留一位小数).
c++代码:
#include<iostream> #include<vector> #include<algorithm> #include<cmath> using namespace std; struct Student{ vector<int> gred; int Avg, AdjAvg; int bonus, absences, Grade; }; int main(){ cout << "MAKING THE GRADE OUTPUT" << endl; int Class; cin >> Class; while (Class --){ int stu, test; cin >> stu >> test; Student student[32]; for (int i = 0; i < stu; ++i){ int a; for (int j = 0; j < test; ++j){ cin >> a; student[i].gred.push_back(a); } student[i].Avg = 0; if (test <= 2){ for (int j = 0; j < test; ++j) student[i].Avg += student[i].gred[j]; student[i].Avg = int(((double)student[i].Avg / test)* 10); } else{ sort(student[i].gred.begin(),student[i].gred.end()); for (int j = 1; j < test; ++j) student[i].Avg += student[i].gred[j]; student[i].Avg = int(((double)student[i].Avg / (test - 1))* 10); } cin >> student[i].bonus >> student[i].absences; student[i].AdjAvg = student[i].Avg + ((student[i].bonus / 2) * 30); } int mean = 0, sd = 0; for (int i = 0; i < stu; ++i) mean += student[i].Avg; mean = int((double)mean / stu); for (int i = 0; i < stu; ++i) sd += (student[i].Avg - mean) * (student[i].Avg - mean); sd = sqrt(double(sd) / stu); for (int i = 0; i < stu; ++i) if (student[i].AdjAvg >= mean + sd) student[i].Grade = 4; else if (student[i].AdjAvg >= mean) student[i].Grade = 3; else if (student[i].AdjAvg >= mean - sd) student[i].Grade = 2; else student[i].Grade = 1; double avg_grd = 0; for (int i = 0; i < stu; ++i){ if (student[i].absences == 0){ if(student[i].Grade < 4) student[i].Grade += 1; }else{ student[i].Grade -= student[i].absences / 4; if (student[i].Grade < 0) student[i].Grade = 0; } avg_grd += student[i].Grade; } avg_grd /= stu; cout.precision(1); cout << fixed << avg_grd << endl; } cout << "END OF OUTPUT" << endl; return 0; }
- 1
信息
- ID
- 528
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 10
- 已通过
- 1
- 上传者