You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

20人4轮无重复均等分桌任务分配技术实现问询

人员桌次分配代码验证与优化方案

需求回顾

  • 将20名人员随机分配至4张桌子完成4轮任务,需满足:
    1. 每名人员每张桌子仅能被分配一次(无重复桌次)
    2. 每张桌子固定安排5人
    3. 人员在4张桌子间实现均等轮换

原代码问题分析

原代码逻辑存在多处不符合需求的缺陷:

  1. 初始分组直接按顺序切分成员列表,未做随机化,不满足“随机分配”的基础要求
  2. 轮次生成逻辑混乱,chunks变量被错误覆盖,无法追踪人员已分配的桌次,会导致重复分配
  3. 组内成员构建逻辑有漏洞,result.extend(new_member_list)会直接将剩余所有成员加入,无法保证每组严格5人,且破坏“无重复桌次”规则
  4. 无法实现“均等轮换”,即无法保证每个成员在4轮中分别前往不同桌子

优化方案(拉丁方轮换实现)

采用拉丁方设计实现轮换,既能保证随机初始分配,又能严格满足所有规则:

import random

def generate_rotation_assignments():
    # 生成20名成员列表并随机打乱
    members = list(range(1, 21))
    random.shuffle(members)
    
    # 第一轮分组:4张桌子,每张5人
    initial_groups = [members[i*5 : (i+1)*5] for i in range(4)]
    rotations = [initial_groups]
    
    # 生成后续3轮轮换:固定第1组不动,其余组循环右移,确保无重复桌次
    for _ in range(3):
        prev_groups = rotations[-1]
        # 固定第0组,剩余组循环右移一位
        new_groups = [prev_groups[0]] + prev_groups[1:][::-1]
        rotations.append(new_groups)
    
    # 格式化结果,便于查看
    formatted_result = []
    for round_idx, round_groups in enumerate(rotations, 1):
        formatted_result.append({
            "轮次": round_idx,
            "桌子1": sorted(round_groups[0]),
            "桌子2": sorted(round_groups[1]),
            "桌子3": sorted(round_groups[2]),
            "桌子4": sorted(round_groups[3])
        })
    
    return formatted_result

# 执行并输出分配结果
assignments = generate_rotation_assignments()
for item in assignments:
    print(f"--- 第{item['轮次']}轮分配 ---")
    for table in ["桌子1", "桌子2", "桌子3", "桌子4"]:
        print(f"{table}: {item[table]}")
    print()

优化点说明

  • 初始随机化:先打乱成员列表再分组,满足“随机分配”要求
  • 无重复桌次:拉丁方轮换逻辑确保每个成员在4轮中不会重复分配到同一桌子
  • 人数严格控制:每轮每张桌子始终保持5人
  • 均等轮换:每个成员会遍历所有4张桌子,实现完全均等的轮换
  • 结果清晰:格式化输出每轮的桌次分配,便于核对

内容的提问来源于stack exchange,提问作者Penguin Learning

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 13:48:23