求周期启停模式下指定时长内最大、最小运行日数量的通用公式
周期启停模式下运行日数的最大/最小计算通用公式
参数定义
P:统计总天数(Period)O:单个周期内的运行天数(On Days)F:单个周期内的停运天数(Off Days)C:单个完整周期的总天数,C = O + F(Cycle)
核心逻辑
运行日与停运日为连续循环模式(如O天运行→F天停运→重复),计算指定时长内的最大/最小运行日数,核心在于统计周期的起始位置:
- 最大运行日:让统计周期起始点衔接停运日末尾,剩余天数优先覆盖运行日
- 最小运行日:让统计周期起始点衔接运行日末尾,剩余天数优先覆盖停运日
通用公式
1. 最大运行日数计算
full_cycles = P // C # 整数除法,取完整周期数量 remainder = P % C # 未构成完整周期的剩余天数 max_extra = min(remainder, O) max_on_days = full_cycles * O + max_extra
2. 最小运行日数计算
full_cycles = P // C remainder = P % C min_extra = max(0, remainder - F) min_on_days = full_cycles * O + min_extra
示例验证
示例1:P=30,O=4,F=4,C=8
- 完整周期数:
30//8=3,剩余天数:30%8=6 - 最大运行日:
3*4 + min(6,4) = 16(与示意图结果一致) - 最小运行日:
3*4 + max(0,6-4) = 14(与示意图结果一致)
示例2:P=31,O=6,F=3,C=9
- 完整周期数:
31//9=3,剩余天数:31%9=4 - 最大运行日:
3*6 + min(4,6) = 22(与示意图结果一致) - 最小运行日:
3*6 + max(0,4-3) = 19(与示意图结果一致)
内容的提问来源于stack exchange,提问作者Nico Fourie
相关产品推荐
相关产品推荐

