Home  >  Article  >  Backend Development  >  怎么用PHP产生n个数,并让其和为定值

怎么用PHP产生n个数,并让其和为定值

WBOY
WBOYOriginal
2016-06-13 13:15:131115browse

如何用PHP产生n个数,并让其和为定值?
请问各位大侠,如何产生n个数,并使其和为定值?

想实现的功能是:
比如说,有10个站点,随机分配给每个一个百分比,并使和为100%,因为想从若干中方法里选择最好的分配方案,肯定会涉及循环,所以有点糊涂了,还望各位大侠指点迷津,先谢了。

------解决方案--------------------
百度: 整数划分.
------解决方案--------------------
1-100之间,产生n-1个随机数,n+1个数排序,相邻之间的差,就是百分比
------解决方案--------------------
php代码

/**
 +---------------------------------
 * 功能:随机生成10个百分数,其和为1
 * @auathor beatyou385981202
 * @time 2012-6-15
 +---------------------------------
 */

print_r(percentage_num());

function percentage_num()
{
//随机生成的百分数存放位置
$arr_num = array();

//初始化第一个值的范围
$num = 100;

for($i=1;$i {
$arr_num[$i] = random_num($num);
$num = $num - $arr_num[$i];
}

//最后一个百分数,用100减去前5个和
for($i=1;$i {
$add_num += $arr_num[$i];
}

$arr_num[10] = 100 - $add_num;

return $arr_num;
}

function random_num($num)
{
return rand(1,$num/2.5);
//这里将其随机生成的范围缩小,是为了得到结果更加理想
}


希望对lz有用 哈哈
------解决方案--------------------
这不是简单的php随机产生数字问题 这涉及到递归搜索算法

本人是从C语言和数据结构与算法论坛过来的 对算法略懂一二

来分析一下楼主的问题 首先楼主没有给我们解释清楚你的最优到底是什么

但是楼主的最优肯定在我下面状态空间里面 我们可以把这一百个数想象成

一个一百个认得队列,那么第一个人和第一百个人之见肯定会有99个空隙,

其实我们至于把9个隔板任意的放到这99个空隙里面,也就得到了你所要的结果

那么99个空选9个有多少种方法? C(99,9)这个数字是很大的,我们可以计算出来

但是如果要打印出所有的结果恐怕需要很多时间。
------解决方案--------------------

他要0.01做步长.....


探讨

这不是简单的php随机产生数字问题 这涉及到递归搜索算法

本人是从C语言和数据结构与算法论坛过来的 对算法略懂一二

来分析一下楼主的问题 首先楼主没有给我们解释清楚你的最优到底是什么

但是楼主的最优肯定在我下面状态空间里面 我们可以把这一百个数想象成

一个一百个认得队列,那么第一个人和第一百个人之见肯定会有99个空隙,

其实我们至于把9个隔板任意的放到这99……
Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn