如何利用小数部分合理分配66次课程的年度间隔天数?
66节课年度间隔分配可行方案
核心计算逻辑
首先明确:66节课之间共有65个间隔,目标总天数365天。设5天间隔的数量为x,6天间隔为y,列方程求解:
x + y = 65 5x + 6y = 365
解得:x=25,y=40。即需要25个5天间隔、40个6天间隔,总天数刚好凑满365天,完全避免年末空档。
具体分配方案
方案1:均匀穿插分配(避免间隔集中)
如果不想某段时间课程密集或稀疏,可按比例随机穿插两种间隔,确保整体分布均匀。用PHP实现的逻辑示例:
$total_lessons = 66; $total_intervals = $total_lessons - 1; $left_5day = 25; $left_6day = 40; $schedule = [0]; // 第一节课放在第0天 $current_day = 0; for ($i = 0; $i < $total_intervals; $i++) { // 按25/65的比例随机选择5天间隔,同时控制剩余数量 if ($left_5day > 0 && ($left_6day == 0 || mt_rand(0, 100) < 38)) { $current_day += 5; $left_5day--; } else { $current_day += 6; $left_6day--; } $schedule[] = $current_day; } // 最终$schedule数组的最后一个值必为365,对应年末最后一节课
方案2:分时段固定间隔(匹配分月需求)
如果要按月份划分固定间隔,可先计算时段内的课程数量:
- 例如前4个月用5天间隔:25个间隔对应26节课,总天数
25*5=125天;剩余40个间隔(41节课)全部用6天间隔,总天数40*6=240天,125+240=365天刚好覆盖全年。 - 若要严格按前3个月安排:前3个月约90天,按5天间隔可安排19节课(18个间隔,
18*5=90天);剩余47节课对应46个间隔,需要365-90=275天,调整为45个6天间隔+1个5天间隔(45*6+5=275),即可填满剩余时段。
验证标准
无论采用哪种方案,只需检查两个指标:
- 所有间隔天数总和为365;
- 最终生成的课程日期数量为66。
满足这两点就能确保年末无空档。
内容的提问来源于stack exchange,提问作者user20442292
相关产品推荐
相关产品推荐

