You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

查找空课时最少教师的C++代码运行异常,该如何修复?

问题分析与代码修复

原代码核心问题

  • 语法错误:未引入<set>头文件,set声明缺少类型参数,多处语句漏写分号,变量名随意混用(lessons/orak拼写混乱)
  • 不符合C标准:使用可变长数组(VLA)如int teachernumber[N],C标准不支持运行时长度的栈数组
  • 逻辑错误:教师遍历范围遗漏最后一位(循环i < N只遍历到编号N-1),排课匹配逻辑完全无效,空课时计算公式错误
  • 存储结构不合理:4个单独数组存储课表信息,不便于按教师、日期筛选排课

修复后的完整代码

#include <iostream>
#include <set>
#include <climits>
using namespace std;

// 存储单条排课信息
struct Lesson {
    int ts;
    int tts;
    int day;
    int hour;
};

int main() {
    int O, N, M;
    cin >> O >> N >> M;
    Lesson lessons[1001]; // O最大为999,开1001足够覆盖边界

    for (int i = 0; i < O; i++) {
        cin >> lessons[i].ts >> lessons[i].tts >> lessons[i].day >> lessons[i].hour;
    }

    int empty_hours[101] = {0}; // 教师编号范围1~100,索引直接对应教师编号

    for (int ts = 1; ts <= N; ts++) { // 遍历每位教师
        for (int day = 1; day <=5; day++) { // 遍历每周5天
            set<int> hours; // 存储当日该教师所有排课时段,自动排序
            for (int i = 0; i < O; i++) {
                if (lessons[i].ts == ts && lessons[i].day == day) {
                    hours.insert(lessons[i].hour);
                }
            }
            if (hours.size() > 1) {
                // 空课时=首尾时段间隔总长度 - 已排课时数
                int min_h = *hours.begin();
                int max_h = *hours.rbegin();
                empty_hours[ts] += (max_h - min_h + 1) - hours.size();
            }
        }
    }

    // 查找空课时最少、编号最小的教师
    int min_empty = INT_MAX;
    int res_ts = 1;
    for (int ts = 1; ts <= N; ts++) {
        if (empty_hours[ts] < min_empty) {
            min_empty = empty_hours[ts];
            res_ts = ts;
        }
    }

    cout << res_ts << endl;
    return 0;
}

逻辑说明

  • 用结构体存储单条排课信息,便于按教师、日期快速筛选
  • 对每位教师每天的排课时段存入set自动排序,直接取首尾元素得到当日最早、最晚排课时段
  • 空课时计算逻辑:首尾时段的总长度(max_h - min_h + 1)减去当日已排课数量,就是首尾之间未排课的空课时数
  • 最后遍历所有教师,优先取空课时最少的,空课时相同取编号最小的,符合题目要求

内容的提问来源于stack exchange,提问作者trolli19

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 08:06:04