酷代码 AI
菜单
服务商

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]

相关提问
本站限时免费提问中
实用工具查看更多
Linux在线手册 [开发类]
Jquery在线手册 [开发类]
今日油价 [生活类]
图片互转base64 [开发类]
时间转换器 [开发类]