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

解决方案 »

  1.   

    我的想法是每一种分配方法都要进行计算,当然先不管php能不能承受,希望各位给点建议,再次谢过。
      

  2.   

    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<10;$i++)
    {
    $arr_num[$i] = random_num($num);
    $num = $num - $arr_num[$i];
    }

    //最后一个百分数,用100减去前5个和
    for($i=1;$i<10;$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有用   哈哈
      

  3.   

    这不是简单的php随机产生数字问题  这涉及到递归搜索算法本人是从C语言和数据结构与算法论坛过来的  对算法略懂一二来分析一下楼主的问题  首先楼主没有给我们解释清楚你的最优到底是什么但是楼主的最优肯定在我下面状态空间里面  我们可以把这一百个数想象成一个一百个认得队列,那么第一个人和第一百个人之见肯定会有99个空隙,其实我们至于把9个隔板任意的放到这99个空隙里面,也就得到了你所要的结果那么99个空选9个有多少种方法? C(99,9)这个数字是很大的,我们可以计算出来但是如果要打印出所有的结果恐怕需要很多时间。