解决成绩公布愉快度计算代码WA问题
### 🐞问题分析 原代码逻辑基本正确,但是在输出时没有考虑到数据范围可能会导致整数溢出的问题。`total_happiness` 变量使用 `int` 类型,当计算结果超出 `int` 所能表示的范围时,就会出现错误。因此需要将 `total_happiness` 改为 `long long` 类型来避免溢出。 ### ✅修改后的代码 ```cpp #include <iostream> #include <vector> int main() { int n, m, B, C; // 输入学生数量 n、询问天数 m、提前一天的愉快度 B 和等待一天的不愉快度 C std::cin >> n >> m >> B >> C; std::vector<int> t(n); // 输入每个学生希望公布成绩的时间 for (int i = 0; i < n; ++i) { std::cin >> t[i]; } // 遍历每一天,计算当天公布成绩时的愉快度之和 for (int day = 1; day <= m; ++day) { // 使用 long long 类型避免整数溢出 long long total_happiness = 0; for (int i = 0; i < n; ++i) { if (day <= t[i]) { // 如果成绩在学生期望时间之前公布,计算提前的天数并乘以 B total_happiness += (long long)(t[i] - day) * B; } else { // 如果成绩在学生期望时间之后公布,计算等待的天数并乘以 C total_happiness -= (long long)(day - t[i]) * C; } } // 输出当天公布成绩时的愉快度之和 std::cout << total_happiness; if (day < m) { std::cout << " "; } } std::cout << std::endl; return 0; } ``` ### 💡代码解释 1. **变量类型修改**:将 `total_happiness` 的类型从 `int` 改为 `long long`,以避免整数溢出。 2. **强制类型转换**:在计算 `(t[i] - day) * B` 和 `(day - t[i]) * C` 时,将其中一个操作数强制转换为 `long long` 类型,确保计算结果也是 `long long` 类型。 ######[AI问答 | 571点数解答 | 2026-05-01 15:44:24]
- C 语言:快速实现 5 个学生信息录入、按成绩升序排序并输出!(字节豆包 | 373点数解答 | 2024-10-30 00:37:20)426
- C语言实现:输入5名学生信息并按成绩升序排序输出(字节豆包 | 354点数解答 | 2024-10-30 18:45:58)371
- C语言:输入5个学生信息,按成绩升序排序并输出(字节豆包 | 373点数解答 | 2024-10-31 19:49:58)366
- C语言:输入5名学生信息并按成绩升序排序输出(字节豆包 | 326点数解答 | 2025-01-01 20:11:47)363
- 成绩等级统计:20个60 - 100分成绩的等级数量揭秘(字节豆包 | 219点数解答 | 2025-04-09 10:20:32)237
- 培训机构学员成绩与年龄更新:C++ 代码实现(DeepSeek | 186点数解答 | 2025-12-16 18:04:31)79
- Python 处理培训机构学员培训后年龄与 NOIP 成绩提升情况(DeepSeek | 73点数解答 | 2025-12-16 18:05:20)83
- 培训机构学员成绩提升:C++代码实现年龄与NOIP成绩更新(DeepSeek | 178点数解答 | 2025-12-31 12:20:24)75
- C3期末:精准求解 3 - 20 范围内数列第 k 项值及注意要点(字节豆包 | 242点数解答 | 2025-06-15 11:26:19)157
- C++求解:查找3 - 20项数列第k项值及注意要点(字节豆包 | 325点数解答 | 2025-06-15 11:27:11)177
- C++ 实现学生成绩统计:最高分、最低分、不及格与优秀人数计算(字节豆包 | 489点数解答 | 2026-04-12 10:09:58)11
- C++ 代码:矩阵转置与 100 米短跑比赛成绩排名实现(字节豆包 | 334点数解答 | 2024-11-16 21:16:59)357