技术饭

php随机生成5到25范围内的数字,组成数组并且数组总和等于100

copylian    0 评论    11917 浏览    2023.06.14

php随机生成5到25范围内的数字,组成数组并且数组总和等于100,生成一个总和是100的数组并不难,只要随机N-1次,然后最后一个数字是100扣除已生成得总和,补足100即可,但难点在于这些数字需要控制在5到25之间,所以只能采用每次赋值计算最大值最小值的方法,然后不随机生成数字,总数扣减,最大值最小值逼近相同。

<?php

/**

* 打印输出方法

* @param $data

* @return void

*/

function p($data = []): void

{

        if (is_array($data) || is_object($data)) {

                echo "<pre>";

                print_r($data);

                echo "</pre>\n";

        } else {

                echo $data, PHP_EOL;

        }

}

/**

* 获取范围内的随机数量数组,并且总和等于某个值

* @param $total 总数

* @param $num 限制生成数量

* @param $limitMin 限制最小值

* @param $limitMax 限制最最大值

* @return array

*/

function getRandNumArr($total = 100, $count = 4, $limitMin = 1, $limitMax = 100):array

{

        //处理数据

        $number = [];

        for ($i = 1; $i <= $count; $i++){

                //最小值

                $min = $total - ($count - $i) * $limitMax;

                $min = $min <= $limitMin ? $limitMin : $min; // 判断最小值

                

                //最大值

                $max = $total - ($count - $i) * $limitMin;

                $max = $max >= $limitMax ? $limitMax : $max; // 判断最大值

                $max = $min > $max ? $min : $max; // 最大值如果小于等于最小值则最大值等于最小值,防止mt_rand报错

                

                //随机数

                $randNum = mt_rand($min, $max);

                $total -= $randNum;

                $number[] = $randNum;

        }

        //随机打乱

        shuffle($number);

        return $number;

}


//调用函数

$number = getRandNumArr(100, 6, 5, 25);

p($number);

p(array_sum($number));


参考:

php - 如何制作5个总和为100的随机数

How to make 5 random numbers with sum of 100 [duplicate]


只袄早~~~
感谢你的支持,我会继续努力!
扫码打赏,感谢您的支持!
php 随机 数组 100 

文明上网理性发言!

  • 还没有评论,沙发等你来抢