谁能帮我vnr没有找到这个游戏戏的公司,100块红包

在 SegmentFault,学习技能、解决问题
每个月,我们帮助 1000 万的开发者解决各种各样的技术问题。并助力他们在技术能力、职业生涯、影响力上获得提升。
标签:至少1个,最多5个
这问题是从那边看来。他之前的思路是这样子:
以前想过一个类似问题,就是没有每个人最大、最小的得钱数的限制,以前的问题可以很好用随机数解决。
于是这个问题也被以前的思想带坑里了,把突破口完全放在了如何处理每个人的随机数上。
于是在面试时间就没有解决这个问题,直到面试结束自己安静下来,仔细想想,发现思路错了。
在我看来其实他一开始的思路恰恰是正确的,然而我在他的下面发布了答案,却没什么人赞同。我只能在自己写个文章分析下我的解题思路。
发一个随机红包,100块钱给10个人。每个人最多12块钱,最少6块钱。怎么分?
设sum=100,n=10,则题目可以得到以下结论6n &= sum &= 12n。
设randNum为随机红包的大小,则可以推出6(n-1) &= (sum-randNum) &= 12(n-1)
从上面的结论里我们可以得到以下答案
function makeSeq(){
$sum = 100;
$result = [];
while ($n & 1) {
// 6n &= sum &=12n
$randNum = mt_rand(600,1200) / 100;
if(($sum-$randNum) &= 6* ($n - 1) && ($sum-$randNum) &= 12* ($n - 1)){
$sum -= $randN
$result[] = $randN
$result[] = $
上面的答案效率不是很高,其实我们可以通过计算红包的上下界,然后通过一次随机得到答案。由6(n-1) &= (sum-randNum) &= 12(n-1)可得sum - 12(n-1) &= randNum &= sum - 6(n-1)。又由6 &= randNum &= 12计算得到红包的上下界:
$min = ($sum - 12 * ($i-1))&6?($sum - 12 * ($i-1)):6;
$max = ($sum - 6 * ($i-1))&12?($sum - 6 * ($i-1)):12;
则最终答案是
function makeSeq2(){
$sum = 100;
$result = [];
for($i=$n;$i&=1;$i--){
$min = ($sum - 12 * ($i-1))&6?($sum - 12 * ($i-1)):6;
$max = ($sum - 6 * ($i-1))&12?($sum - 6 * ($i-1)):12;
$randNum = mt_rand($min,$max);
$sum -= $randN
$result[] = $randN
根据种子生成序列,且符合期望
评论里说生成的序列不符合平均为10的期望,所以我们需要在返回结果结果前打乱序列。最好还能根据种子生成每次都相同的结果,在这里我们要自定义shuffle函数。
function myShuffle(&$items,$seed) {
mt_srand($seed);
for ($i = count($items) - 1; $i & 0; $i--){
$j = @mt_rand(0, $i);
$tmp = $items[$i];
$items[$i] = $items[$j];
$items[$j] = $
function makeSeq2($seed){
mt_srand($seed);
$sum = 100;
$result = [];
for($i=$n;$i&=1;$i--){
$min = ($sum - 12 * ($i-1))&6?($sum - 12 * ($i-1)):6;
$max = ($sum - 6 * ($i-1))&12?($sum - 6 * ($i-1)):12;
$randNum = mt_rand($min,$max);
$sum -= $randN
$result[] = $randN
myShuffle($result,$seed);
7 收藏&&|&&36
你可能感兴趣的文章
1 收藏,966
203 收藏,3k
9 收藏,270
取值当然会有变化,比如当有15块,2个人分的时候,第一个人必然最多只能拿9块。
取值当然会有变化,比如当有15块,2个人分的时候,第一个人必然最多只能拿9块。
这样随机取值范围会变化,就不能保证公平性了吧
这样随机取值范围会变化,就不能保证公平性了吧
你这个算法,运行多次,结果看过吗?理论上重复多次的话应该每个人分到的钱是接近10的,但是在你的算法中第一次的取值范围是6~12,数字落在6~10之间的概率是2/3,取值相对偏小,后面人取值会偏大.
你这个算法,运行多次,结果看过吗?
理论上重复多次的话应该每个人分到的钱是接近10的,但是在你的算法中第一次的取值范围是6~12,数字落在6~10之间的概率是2/3,取值相对偏小,后面人取值会偏大.
确实会有这个问题,不过一般抢红包的时候一般人的顺序是随机的,实际期望也是符合的。当然在返回前调用shuffle函数也能符合期望。
确实会有这个问题,不过一般抢红包的时候一般人的顺序是随机的,实际期望也是符合的。当然在返回前调用shuffle函数也能符合期望。
不能这么说,如果结果对先取和后取的期望不同,那算法就是不公平的,也就不符合题目的原意了。你的算法的公平性是建立在用户的信息不对称的基础上的,这明显是不合理的。在验证算法之前,应该先假设所有人得到的信息是全面的,不存在暗箱操作的假设。虽然真实环境都是在暗箱中进行的,但作为题目,还是应该按照理想情况去考虑。
不能这么说,如果结果对先取和后取的期望不同,那算法就是不公平的,也就不符合题目的原意了。你的算法的公平性是建立在用户的信息不对称的基础上的,这明显是不合理的。在验证算法之前,应该先假设所有人得到的信息是全面的,不存在暗箱操作的假设。虽然真实环境都是在暗箱中进行的,但作为题目,还是应该按照理想情况去考虑。
一句话,你的答案具有一定的实用性,但不是这个问题的正确答案。
一句话,你的答案具有一定的实用性,但不是这个问题的正确答案。
你说的问题,我已经解决了,而且可以根据随机种子得到相同的序列。
你说的问题,我已经解决了,而且可以根据随机种子得到相同的序列。
可以在红包发出去的时候就直接定好10个符合要求的定额,抢红包的人再在这10个金额中随机领取一份。
可以在红包发出去的时候就直接定好10个符合要求的定额,抢红包的人再在这10个金额中随机领取一份。
这个算法不科学,如果我来算的话,我首先会保证每个人都有6块钱,这样剩下40快钱随机40次分配给所有人,如果非配的那个人已经达到12块则跳过继续分配最终把钱全部分完
这个算法不科学,如果我来算的话,我首先会保证每个人都有6块钱,这样剩下40快钱随机40次分配给所有人,如果非配的那个人已经达到12块则跳过继续分配最终把钱全部分完
[9, 12, 10, 12, 11, 12, 8, 12, 8, 6][8, 9, 12, 11, 10, 10, 9, 12, 10, 9][8, 11, 11, 11, 10, 7, 12, 11, 10, 9][10, 10, 9, 10, 12, 9, 11, 12, 10, 7][7, 12, 9, 12, 8, 11, 11, 11, 12, 7][9, 11, 8, 12, 12, 11, 11, 9, 10, 7][9, 12, 12, 9, 10, 10, 9, 11, 11, 7][11, 9, 8, 12, 8, 11, 8, 12, 12, 9][6, 11, 10, 11, 11, 11, 9, 12, 8, 11][7, 9, 10, 12, 10, 12, 11, 10, 10, 9]
[9, 12, 10, 12, 11, 12, 8, 12, 8, 6]
[8, 9, 12, 11, 10, 10, 9, 12, 10, 9]
[8, 11, 11, 11, 10, 7, 12, 11, 10, 9]
[10, 10, 9, 10, 12, 9, 11, 12, 10, 7]
[7, 12, 9, 12, 8, 11, 11, 11, 12, 7]
[9, 11, 8, 12, 12, 11, 11, 9, 10, 7]
[9, 12, 12, 9, 10, 10, 9, 11, 11, 7]
[11, 9, 8, 12, 8, 11, 8, 12, 12, 9]
[6, 11, 10, 11, 11, 11, 9, 12, 8, 11]
[7, 9, 10, 12, 10, 12, 11, 10, 10, 9]
分享到微博?
我要该,理由是:
在 SegmentFault,学习技能、解决问题
每个月,我们帮助 1000 万的开发者解决各种各样的技术问题。并助力他们在技术能力、职业生涯、影响力上获得提升。已解决问题
帮忙查一下资料,朋友转了100元的微信红包给我,该收吗?
公司账务不多,所以一直以来都是请的兼职会计,会计自己做了个网站,有时候在网上接一些活来做,但是自己没有开通诚信通,所以有些信息看不到,今天打电话过来,表示希望能够用一下我们的账号,一年付500元。应为考虑到公司的一些信息,所以没有同意,就说有需要可以这边帮忙查一下。正巧刚才查了一个信息,接着他就给我发了100元的微信红包,我该收吗?
考虑再三,觉得不该收,就把红包转回去了,本来就只是举手之劳的事儿,我这样做对吗?
浏览次数:1469
用手机阿里扫一扫
最满意答案
不收红包是情义,收了是本份,说明你这朋友也是个不喜欢欠人情账的,可以深交,楼主也很好啊,值得交,有情有义
答案创立者
以企业身份回答&
朋友有很多种普通的,一般的,特好的,如果是特好朋友这个钱不收,只要是好朋友能帮上的绝对帮,你有困难的时候,我相信你的好朋友也会帮你。你不收是讲情,朋友情义有时候说真的真不是钱可以买到的。
可以的 ,朋友之间谈钱就伤感情了,他既然给你转钱,应该是无奈之举吧。我建议这种朋友应该深交!!
楼主真仁义
您自己考虑周到就好,朋友之间的事情
不收是正确的
我觉得你做的很对,不收比较好,朋友间谈钱伤感情
有来有往,LZ这次帮助了他,以后他也会帮助你。确实有时候谈钱伤感情哈
能帮就帮一下吧!只要不损失公司的利益,
最好和领导请示了。
对!不是自己的不要这钱,做人就要实实在在,小钱不要做得很对,
共2页 到页
正在进行的活动
生意经不允许发广告,违者直接删除
复制问题或回答,一经发现,拉黑7天
快速解决你的电商难题
店铺优化排查提升2倍流量
擅长&nbsp 店铺优化
您可能有同感的问题
扫一扫用手机阿里看生意经
问题排行榜
当前问题的答案已经被保护,只有知县(三级)以上的用户可以编辑!写下您的建议,管理员会及时与您联络!
server is ok当前位置 & &
& 的哥还手机要红包 任性的给自己发了100元
的哥还手机要红包 任性的给自己发了100元
07:16:18&&出处:&&
编辑:冰冰 &&)
让小伙伴们也看看:
阅读更多:
好文共享:
文章观点支持
文章价值打分
当前文章打分0 分,共有0人打分
[12-03][12-03][12-02][12-02][12-02][12-02][12-02][12-02][12-02][12-02]
登录驱动之家
没有帐号?
用合作网站帐户直接登录阿里巴巴钉钉超级员工福利100元红包怎么得?
稿源:电脑百事网
阿里巴巴旗下钉钉中国酷公司超级员工福利100%撸100元现金红包。这个活动是阿里巴巴官方的,提现是秒到账。 阿里巴巴钉钉超级员工福利 抽1-50元现金红包满100元可提现支付宝,阿里巴巴钉钉100元红包怎么得?阿里巴巴钉钉100元红包可以提现吗?阿里巴巴钉钉超级员工福利100元红包怎么得本活动是阿里巴巴旗下钉钉APP活动 以前和朋友聊天知道有这个钉钉的APP!今天就送红包了 首次注册抽1-50元 需要满100元才可以提现支付宝! 打开手机扫码,领取50元现金!进入后可以抽奖 小编抽到了50元然后手机验证领取,再去下载钉钉APP。打开APP后手机号注册按照提示随便选择 信息随便填 然后进入我的-福利社-超级员工福利可以看到抽到的50元了 后去更多抽奖机会 观看视频 点击开始暂停领取抽奖机会第二次抽到了10元
然后可以去获取更多机会里面邀请好友 邀请1人获得1次抽奖 满100元后提取支付宝 投稿者提供的今天支付宝到账图 不知道能不能接码刷邀请 大家自测。手机扫码进入:
有好的文章希望站长之家帮助分享推广,猛戳这里
本网页浏览已超过3分钟,点击关闭或灰色背景,即可回到网页

我要回帖

更多关于 领取红包 的文章

 

随机推荐