考试班级排名难题:按成绩比例排序,这些处理细节要注意!
```cpp #include <iostream> #include <vector> #include <algorithm> #include <string> // 定义班级结构体 struct Class { int id; // 班级编号 int total; // 班级总人数 int countA, countB, countC; // 分别记录A、B、C的数量 }; // 比较函数,用于对班级进行排序 bool compare(const Class& a, const Class& b) { // 先比较A的比例 double ratioA1 = static_cast<double>(a.countA) / a.total; double ratioA2 = static_cast<double>(b.countA) / b.total; if (ratioA1 != ratioA2) { return ratioA1 > ratioA2; } // 若A的比例相同,比较B的比例 double ratioB1 = static_cast<double>(a.countB) / a.total; double ratioB2 = static_cast<double>(b.countB) / b.total; if (ratioB1 != ratioB2) { return ratioB1 > ratioB2; } // 若B的比例相同,比较C的比例 double ratioC1 = static_cast<double>(a.countC) / a.total; double ratioC2 = static_cast<double>(b.countC) / b.total; if (ratioC1 != ratioC2) { return ratioC1 > ratioC2; } // 若C的比例相同,比较班级人数 if (a.total != b.total) { return a.total > b.total; } // 若班级人数相同,比较班级编号 return a.id < b.id; } int main() { int n; std::cin >> n; std::vector<Class> classes(n); // 读取每个班级的成绩信息 for (int i = 0; i < n; ++i) { classes[i].id = i + 1; std::string scores; std::cin >> scores; classes[i].total = scores.length(); classes[i].countA = classes[i].countB = classes[i].countC = 0; // 统计A、B、C的数量 for (char score : scores) { if (score == 'A') { classes[i].countA++; } else if (score == 'B') { classes[i].countB++; } else if (score == 'C') { classes[i].countC++; } } } // 对班级进行排序 std::sort(classes.begin(), classes.end(), compare); // 输出排序后的班级编号 for (int i = 0; i < n; ++i) { std::cout << classes[i].id; if (i < n - 1) { std::cout << " "; } } std::cout << std::endl; return 0; } ``` 我在以往的开发过程中,碰到过以下几点需要格外小心处理的地方: 1. 在计算比例时,要注意将整数转换为浮点数,避免整数除法带来的精度问题。 2. 比较函数的逻辑要清晰,确保各种情况都能正确处理,避免出现排序错误。 3. 输入输出的格式要严格按照题目要求,特别是分隔符和换行符的处理。 ######[AI写代码神器 | 800点数解答 | 2025-08-13 16:00:03]
- C 语言:快速实现 5 个学生信息录入、按成绩升序排序并输出!(字节豆包 | 373点数解答 | 2024-10-30 00:37:20)420
- C语言实现:输入5名学生信息并按成绩升序排序输出(字节豆包 | 354点数解答 | 2024-10-30 18:45:58)366
- C语言:输入5个学生信息,按成绩升序排序并输出(字节豆包 | 373点数解答 | 2024-10-31 19:49:58)362
- C语言:输入5名学生信息并按成绩升序排序输出(字节豆包 | 326点数解答 | 2025-01-01 20:11:47)355
- Java 实现:定义尊享无忧学生类并打印学生信息(字节豆包 | 264点数解答 | 2024-09-18 16:21:36)292
- C语言实现多班级学生信息管理系统:含增删改查与多样排序功能(GPT | 2547点数解答 | 2024-12-15 22:08:58)368
- C语言实现学生信息管理系统:含增删改查与多种排序功能(GPT | 6408点数解答 | 2024-12-15 22:10:03)361
- 成绩等级统计:20个60 - 100分成绩的等级数量揭秘(字节豆包 | 219点数解答 | 2025-04-09 10:20:32)228
- 培训机构学员成绩与年龄更新:C++ 代码实现(DeepSeek | 186点数解答 | 2025-12-16 18:04:31)71
- Python 处理培训机构学员培训后年龄与 NOIP 成绩提升情况(DeepSeek | 73点数解答 | 2025-12-16 18:05:20)79
- 培训机构学员成绩提升:C++代码实现年龄与NOIP成绩更新(DeepSeek | 178点数解答 | 2025-12-31 12:20:24)73
- 课程成绩统计程序 3:从继承到组合,解锁灵活开发新姿势!(字节豆包 | 2064点数解答 | 2025-12-04 10:47:33)91