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

如何用算法实现在线卡牌游戏中Bot玩家的均匀分布?

均匀分布Bot的座位安排算法

核心思路是把人类玩家(H)均匀拆分为Bot数量(B)个分组,每个分组的人类数量差异不超过1,再在每个分组后拼接一个Bot(B),最终得到均匀分布的座位序列。

算法步骤

  • 边界处理:如果没有Bot,直接返回H重复H次;如果没有人类玩家,返回B重复B次。
  • 计算分组大小:对每个Bot对应的分组(共B个),计算该组的人类数量:
    current_h = (H * (i + 1)) // B - (H * i) // B
    
    其中i是分组索引(从0到B-1)。这个公式能保证每个分组的大小要么是H//B,要么是H//B + 1,且这些包含更多人类的分组会均匀分布在序列中,不会集中在某一段。
  • 构建序列:遍历每个分组,先拼接current_h个H,再拼接一个B,最终得到完整的座位字符串。

示例验证

  1. 输入6 3(H=6,B=3):

    • 每个分组的current_h计算:
      • i=0: (6*1)//3 - 0 = 2 → HHB
      • i=1: (6*2)//3 - 2 = 4-2=2 → HHB
      • i=2: (6*3)//3 -4=6-4=2 → HHB
    • 最终结果:HHBHHBHHB,完全符合预期。
  2. 输入6 4(H=6,B=4):

    • 每个分组的current_h计算:
      • i=0: (6*1)//4 -0=1 → HB
      • i=1: (6*2)//4 -1=3-1=2 → HHB
      • i=2: (6*3)//4 -3=4-3=1 → HB
      • i=3: (6*4)//4 -4=6-4=2 → HHB
    • 最终结果:HBHHBHBHHB,与你期望的HHBHBHHBHB仅起始分组不同,两者都是Bot均匀分布的最优解——Bot之间的人类数量交替为1和2,没有集中扎堆的情况。

伪代码实现

function generateSeating(H, B):
    if B == 0:
        return 'H' * H
    if H == 0:
        return 'B' * B
    result = ''
    for i from 0 to B-1:
        current_h = (H * (i + 1)) // B - (H * i) // B
        result += 'H' * current_h + 'B'
    return result

这个算法适用于任意H和B的组合,能保证Bot尽可能均匀分布,满足游戏的公平性要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 05:09:11