分页文档归置文件夹:订书机装订规则技术咨询
关于订书机装订纸张与文件夹收纳的问题解析
看起来你是在纠结怎么判断多台订书机装订的纸张能不能放进同一个文件夹对吧?其实核心就是看这些订书机覆盖的纸张区间能不能连续衔接甚至重叠,最终形成一个从第一张到最后一张的完整覆盖。
举个实际场景的例子:
- 已知单台订书机最多订10张纸,25张纸就得用3台。
- 第一种装订方式:1-10号、10-19号、19-25号,每个区间都和下一个有重叠或精准衔接,整个覆盖了1到25号的所有纸张,所以一个文件夹就够。
- 第二种装订方式:1-10号、8-18号、16-25号,前一个区间和后一个的区间有重叠,连起来还是完整覆盖1-25号,自然也能放进同一个文件夹。
核心判断逻辑
你可以把每个订书机的装订区间看作一个[起始页码, 结束页码]的范围,然后按以下步骤验证:
- 把所有区间按起始页码从小到大排序
- 从第一个区间开始,依次检查下一个区间的起始页码是否 ≤ 前一个区间的结束页码 + 1(哪怕刚好衔接,比如前一个到10,下一个从11开始,也算连续)
- 如果所有区间都满足这个条件,并且最后一个区间的结束页码等于总纸张数,那就能放进同一个文件夹。
举个反例:如果第一台订1-10号,第二台订12-21号,第三台订22-25号,10和12之间断了,这时候就需要至少两个文件夹(1-10号一个,12-25号一个)。
简单的伪代码实现
如果要写代码自动判断的话,大概是这样:
def can_use_single_folder(intervals, total_pages): # 按起始页码排序区间 sorted_intervals = sorted(intervals, key=lambda x: x[0]) current_max_end = sorted_intervals[0][1] # 遍历后续区间检查连续性 for start, end in sorted_intervals[1:]: if start > current_max_end + 1: return False # 更新当前覆盖的最大页码 current_max_end = max(current_max_end, end) # 最后验证是否覆盖所有纸张 return current_max_end == total_pages # 测试示例 test_case1 = [(1,10), (10,19), (19,25)] print(can_use_single_folder(test_case1, 25)) # 输出True test_case2 = [(1,10), (8,18), (16,25)] print(can_use_single_folder(test_case2, 25)) # 输出True test_case3 = [(1,10), (12,21), (22,25)] print(can_use_single_folder(test_case3, 25)) # 输出False
这样不管是手动判断还是用代码自动验证,都能快速确定是否只需要一个文件夹啦~
内容的提问来源于stack exchange,提问作者sadday3
相关产品推荐
相关产品推荐

