把数字随机分成 php,把一个数随机分成n份,随机数字和等于这个数字

这篇博客介绍了两种随机数分配算法,分别用于将数值精确分配到多个部分,例如红包分发和资源均衡。第一种算法用于将100个数随机分为10份,确保总和为100且结果保留两位小数;第二种算法将100随机分成5份整数,保证总和为100。这两种方法在实际应用中具有较高的灵活性和实用性。
摘要由CSDN通过智能技术生成

一、100个数随机分成10份:

说明:

1、此算法$money_total值可大于 $personal_num 也可以小于$personal_num;

2、得出来的结果是保留两位小数点;

3、相加和等于100;可用于发红包,精准到小数;

4、值类型结果是string(字符串);

$money_total=100;

$personal_num=10;

$min_money=0.01;

$money_right=$money_total;

$randMoney=[];

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

if($i== $personal_num){

$money=$money_right;

}else{

$max=$money_right*100 - ($personal_num - $i ) * $min_money *100;

$money= rand($min_money*100,$max) /100;

$money=sprintf("%.2f",$money);

}

$randMoney[]=$money;

$money_right=$money_right - $money;

$money_right=sprintf("%.2f",$money_right);

}

shuffle($randMoney);

var_dump($randMoney);

运行结果:

array (size=10)

0 => string '54.91' (length=5)

1 => string '3.02' (length=4)

2 => string '4.59' (length=4)

3 => string '12.76' (length=5)

4 => string '0.02' (length=4)

5 => string '22.83' (length=5)

6 => string '0.01' (length=4)

7 => string '0.01' (length=4)

8 => string '0.01' (length=4)

9 => string '1.84' (length=4)

二、100随机分成5份:

说明:

1、此算法$total_money值必须大于$total_num;

2、得出来的结果是整数;

3、相加和等于100;

4、值类型结果是int(整型);

0;$i--){

$data[$i]=1;

$ls_money=0;

if($total_money>0){

if($i==1){

$data[$i] +=$total_money;

}else{

$max_money=floor($total_money/$i);

$ls_money=mt_rand(0,$max_money);

$data[$i]+=$ls_money;

}

}

$total_money -= $ls_money;

}

var_dump($data);

运算结果:

array (size=5)

5 => int 5

4 => int 17

3 => int 23

2 => int 9

1 => int 46

三、6人随机分成3组

运行结果:

array (size=3)

0 => int 2

1 => int 3

2 => int 1

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值