| 
 | 
 
 
发表于 2017-9-9 13:16:38
|
显示全部楼层
 
 
 
 本帖最后由 solomonxian 于 2017-9-9 14:34 编辑  
 
用正态分布吧,可能比较符合现实 
标准差对应分散程度,按循环次数上取u-3σ>= 0下最大比较好, 
 
但是如果分散一点貌似更好玩,取 u/2, 小数点保留1位好了 
有 2.5% 概率出现负数,那就递归再来一遍,钱一定要比人数多大 
- import random, math
 
 - def fun(money, people):
 
 -     lst = sorted(round(random.gauss(money//people, money//people//2),1) for _ in range(people)) 
 
 -     temp = round(money - math.fsum(lst),1)
 
 -     
 
 -     num = sorted([(temp,0),(temp+0.1,-1)], key=lambda x :abs(x[0]))[0][1] # 因为精度是0.1
 
 -     lst[num] = round(lst[num] + temp, 1)
 
 -     random.shuffle(lst)
 
 -     return fun(money, people) if sorted(lst)[0]<=0 else lst
 
  复制代码 |   
 
评分
- 
查看全部评分
 
 
 
 
 
 |