Pascal实现电视节目安排问题代码重写
从你给出的反馈来看,代码在部分测试用例上没有得到正确结果,问题可能出在排序或者贪心选择的逻辑上。之前的代码在排序时可能没有处理好节目结束时间相同的情况,我们可以在排序时增加一个额外的判断条件,当结束时间相按照开始时间升序排序。以下是重写后的Pascal代码: ```pascal program TVPrograms; type ProgramType = record start: integer; endTime: integer; end; var programs: array[1..100] of ProgramType; n, i, j, count, currentEnd: integer; temp: ProgramType; // 交换两个节目的位置 procedure swap(var a, b: ProgramType); var t: ProgramType; begin t := a; a := b; b := t; end; // 按节目结束时间排序,若结束时间相同则按开始时间排序 procedure sortPrograms(var arr: array of ProgramType; len: integer); var i, j: integer; begin for i := 1 to len - 1 do for j := i + 1 to len do if (arr[i].endTime > arr[j].endTime) or ((arr[i].endTime = arr[j].endTime) and (arr[i].start > arr[j].start)) then swap(arr[i], arr[j]); end; begin readln(n); while n <> 0 do begin // 读取节目信息 for i := 1 to n do begin readln(programs[i].start, programs[i].endTime); end; // 按节目结束时间排序 sortPrograms(programs, n); // 初始化计数器和当前结束时间 count := 0; currentEnd := 0; // 贪心算法选择节目 for i := 1 to n do begin if programs[i].start >= currentEnd then begin inc(count); currentEnd := programs[i].endTime; end; end; // 输出结果 writeln(count); // 读取下一组数据 readln(n); end; end. ``` ### 代码解释 - **排序逻辑**:在`sortPrograms`函数中,增加了额外的判断条件`(arr[i].endTime = arr[j].endTime) and (arr[i].start > arr[j].start)`,当两个节目的结束时间相按照开始时间升序排序。 - **贪心选择**:排序完成后,使用贪心算法选择节目,只要当前节目的开始时间大于等于上一个节目结束时间,就选择该节目,并更新当前结束时间。 你可以使用这个代码再次进行测试,看看是否能解决之前的问题。 ######[AI问答 | 679点数解答 | 2026-03-18 18:03:38]
- Python 实现球类:精准计算半径、表面积与体积,附输入验证与异常处理!(阿里通义 | 261点数解答 | 2024-11-28 21:19:39)340
- 51 单片机:定时器 0 实现 8 个 LED 循环点亮,附代码及优化建议(字节豆包 | 1193点数解答 | 2024-12-27 15:10:29)308
- 开启多语言编程模式:C++、Python、Pascal、Java、C语言为你解答问题!(字节豆包 | 33点数解答 | 2025-12-13 19:57:46)48
- 用Pascal和C语言解单调方程:求最小正小数x使S(x)>y(DeepSeek | 1664点数解答 | 2025-12-17 17:52:32)30
- 编程五语齐上阵!满足你问题的多样解答需求(DeepSeek | 34点数解答 | 2025-12-27 19:46:30)46
- Pascal实现电视节目观看数量最大化问题的解决方案(字节豆包 | 587点数解答 | 2026-03-18 18:01:57)6
- 用 JS 中 for 循环实现 1 到 100 相加并输出结果到页面的完整代码 ( | 240点数解答 | 2024-05-20 22:11:29)455
- 用 JS 的 while 循环实现 1 到 100 相加并输出到页面的代码揭秘( | 47点数解答 | 2024-05-20 22:16:48)352
- Android开发必知:@Override 注解重写方法探秘与示例 (阿里通义 | 251点数解答 | 2023-11-07 22:49:37)324
- 内存超限难题破解:优化代码实现图案生成,成功通过所有测试用例(DeepSeek | 714点数解答 | 2026-01-06 17:49:47)32
- 递归图形输出难题:从错误到正确,探寻`n=4`图形输出的终极解法(阿里通义 | 3164点数解答 | 2026-01-07 18:01:24)37
- 从 n 根火柴中取 3 根构成正三角形的取法数量计算方法(字节豆包 | 602点数解答 | 2026-03-01 17:35:57)9