cambaluc的个人博客分享 http://blog.sciencenet.cn/u/cambaluc

博文

分红包的Python算法

已有 4850 次阅读 2017-12-12 10:43 |个人分类:算法|系统分类:科研笔记| Python

import random
total=200
n=15
x=[random.random() for i in range(n)]
e=[int(i/sum(x)*(total-n))+1 for i in x]           #每人留一分,剩余随机分,用四舍五入可能会超过总数
re=total-sum(e)
u=[random.randint(0,n-1) for i in range(re)]     #截断取整剩的零头再随机给各人1分
for i in range(re):            
   e[u[i]]+=1
print(e)

   看了网上一些模拟分红包的算法,总觉得不那么"随机",有的算法是从总钱数中随机取,这样是条件概率,后面的红包会越来越少;为了保证每人都有份,有的算法遇到极端情况,明显不合理;有的算法写的太长,没利用好Python的简捷性。




https://wap.sciencenet.cn/blog-797552-1089280.html

上一篇:Ax=b 之二____举个栗子,图说Ax=b
下一篇:C语言做一道小学奥数题
收藏 IP: 124.207.149.*| 热度|

1 yangb919

该博文允许注册用户评论 请点击登录 评论 (0 个评论)

数据加载中...

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-11-9 07:11

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部