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

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条)

报告相同问题?

悬赏问题

  • ¥100 需要跳转番茄畅听app的adb命令
  • ¥50 寻找一位有逆向游戏盾sdk 应用程序经验的技术
  • ¥15 请问有用MZmine处理 “Waters SYNAPT G2-Si QTOF质谱仪在MSE模式下采集的非靶向数据” 的分析教程吗
  • ¥50 opencv4nodejs 如何安装
  • ¥15 adb push异常 adb: error: 1409-byte write failed: Invalid argument
  • ¥15 nginx反向代理获取ip,java获取真实ip
  • ¥15 eda:门禁系统设计
  • ¥50 如何使用js去调用vscode-js-debugger的方法去调试网页
  • ¥15 376.1电表主站通信协议下发指令全被否认问题
  • ¥15 物体双站RCS和其组成阵列后的双站RCS关系验证