参与者最少组数分组方案设计及代码实现(每组限6-10人)
人数分组问题解决思路与实现
解决思路
- 核心目标是优先保证总组数最少,因此首先以每组最多10人的上限计算最小可能的组数
- 具体步骤如下:
- 合法性校验:若总人数X<6,无法满足每组最少6人的要求,直接返回无法分组
- 计算最小可能组数k:对X/10的结果向上取整,确保每组人数不超过10人的前提下组数最少
- 可行性校验:判断是否满足
6*k ≤ X,若不满足说明该组数下无法达到每组最少6人的要求,同样无法完成分组 - 人数分配:若校验通过,先给所有组分派基础人数
m = X // k,再将余下的r = X % k个名额分配给r个组,每个组加1人,最终得到r个m+1人的组、k-r个m人的组,所有组人数均在6~10区间内
示例验证:总人数81时,k=ceil(81/10)=9,6*9=54≤81,m=81//9=9,r=0,因此得到9个每组9人的分组,符合要求。
实现代码(Python)
import math def split_groups(x): # 总人数合法性校验 if x < 6: return "无法完成分组,总人数不能少于6人" # 计算最小可能的组数 min_group = math.ceil(x / 10) # 校验该组数下是否满足最低人数要求 if min_group * 6 > x: return "无法完成分组,无法同时满足每组人数6~10的要求" # 分配各小组人数 base = x // min_group remainder = x % min_group group_list = [] for _ in range(remainder): group_list.append(base + 1) for _ in range(min_group - remainder): group_list.append(base) return f"共分为{min_group}个小组,每组人数分别为:{group_list}" # 示例测试 print(split_groups(81)) # 输出:共分为9个小组,每组人数分别为:[9, 9, 9, 9, 9, 9, 9, 9, 9]
内容的提问来源于stack exchange,提问作者Rachit
相关产品推荐
相关产品推荐

