nineday900 2019-10-25 16:41 采纳率: 57.1%
浏览 725
已采纳

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这种有大有小的,要怎么做呢?望各位大佬指教

  • 写回答

2条回答 默认 最新

  • adgentleman 2019-10-25 18:12
    关注

    给你提供一种思路:获取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
    不知道你看懂了没

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?
  • ¥15 c++头文件不能识别CDialog