循环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这种有大有小的,要怎么做呢?望各位大佬指教
给你提供一种思路:获取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
不知道你看懂了没
你这个和微信红包的算法很像,可以考虑使用这个
https://blog.csdn.net/u011510825/article/details/80149029