php 循环10次随机数,加起来的和要为100,这个怎么写?

循环10次,每次得到一个随机数,相加要等于100,随机数不能为0,且随机数需有大有小

function randStr($num,$max){
        $sum = 0;
        $count = 0;
        while($sum<$max){
            $surNum = $num-$count;
            $rand = mt_rand(1,($max-$sum-$surNum)+1);
            $sum += $rand;
            $count++;
            echo $rand."<br/>";
        }
        echo $sum;
    }

    randStr(10,100);

我写的这个,一开始值会特别大,后面就全是2,1,1这种数,我希望得到的结果是7,9,15,3,5这种有大有小的,要怎么做呢?望各位大佬指教

php

2个回答

给你提供一种思路:获取n个随机数n1,n2,n3...,分别对某个数取余并加1作为最后的值,把所有取余得到的值加起来得到sum,
每个人获得的红包=n1/sum*红包

比如红包总数为100,发给5个人,这5个人对应获得的随机数分别为11,13,5,20,99,对10取余加1
那么第1个人对应的n值为11%10+1=2
其余的人为4,6,1,10
sum=2+4+6+1+10=23
第1个人的红包=2/23*100=8.69
不知道你看懂了没

nineday900
nineday900 感谢大佬指教
3 个月之前 回复

你这个和微信红包的算法很像,可以考虑使用这个
https://blog.csdn.net/u011510825/article/details/80149029

nineday900
nineday900 谢谢
3 个月之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问