把总数amount拆分以标准差最小的标准,平均拆分成count个整数
    public function tt_add(){
        $res = $this->arr_avg(,);
        echo array_sum($res);
        echo '----' . count($res);
        dump($res);
        exit;
    }
    /***
     * @param $amount '总数'
     * @param $count '需要拆分数据个数'
     * @return array|mixed '把总数amount拆分已标准差最小的标准,平均拆分成count个整数'
     */
    public function arr_avg($amount, $count)
    {
        $avg_num  = $amount / $count;
        $ceil_num = ceil($amount / $count);
        if ($avg_num == $ceil_num) {
            $avg_res = array_fill(, $count, (int)$ceil_num);
        } else {
            if ($amount < $count) {
                $avg_res_1 = array_fill(, $amount, (int)$ceil_num);      // 这里只会填充1
                $avg_res_2 = array_fill($amount - , $count - $amount, );
                $avg_res   = dealed_array_merge($avg_res_1, $avg_res_2);
            } else {
                $floor_num = floor($amount / $count);
                $avg_res   = array_fill(, $count, (int)$floor_num);
                $left_num = $amount - array_sum($avg_res);
                if ( <= $left_num) {
                    $left_avg_res = $this->arr_avg($left_num, $count);
                    foreach ($left_avg_res as $k => $v){
                        if ($v == ){
                            unset($left_avg_res[$k]);
                        }
                    }
                    unset($v);
                    $left_avg_res = array_values($left_avg_res);
                    $avg_res = $this->array_add($avg_res,$left_avg_res);
                }
            }
        }
        return $avg_res;
    }
    /***
     * @param $a
     * @param $b
     * @return mixed '2个一维数组相加,键名相同相加,不同的均保留'
     */
    public function array_add($a,$b)
    {
        //根据键名获取两个数组的交集
        $arr = array_intersect_key($a, $b);
        //遍历第二个数组,如果键名不存在与第一个数组,将数组元素增加到第一个数组
        foreach ($b as $key => $value) {
            if (!array_key_exists($key, $a)) {
                $a[$key] = $value;
            }
        }
        //计算键名相同的数组元素的和,并且替换原数组中相同键名所对应的元素值
        foreach ($arr as $key => $value) {
            $a[$key] = $a[$key] + $b[$key];
        }
        //返回相加后的数组
        return $a;
    }
例:amount:20   count:14  
20----8
<pre>array(8) {
  [0] => int(3)
  [1] => int(3)
  [2] => int(3)
  [3] => int(3)
  [4] => int(2)
  [5] => int(2)
  [6] => int(2)
  [7] => int(2)
}
</pre>
例:amount: 20, count : 20
20----20
<pre>array(20) {
  [0] => int(1)
  [1] => int(1)
  [2] => int(1)
  [3] => int(1)
  [4] => int(1)
  [5] => int(1)
  [6] => int(1)
  [7] => int(1)
  [8] => int(1)
  [9] => int(1)
  [10] => int(1)
  [11] => int(1)
  [12] => int(1)
  [13] => int(1)
  [14] => int(1)
  [15] => int(1)
  [16] => int(1)
  [17] => int(1)
  [18] => int(1)
  [19] => int(1)
}
</pre>
例: amount: 20, count: 22
20----22
<pre>array(22) {
  [0] => int(1)
  [1] => int(1)
  [2] => int(1)
  [3] => int(1)
  [4] => int(1)
  [5] => int(1)
  [6] => int(1)
  [7] => int(1)
  [8] => int(1)
  [9] => int(1)
  [10] => int(1)
  [11] => int(1)
  [12] => int(1)
  [13] => int(1)
  [14] => int(1)
  [15] => int(1)
  [16] => int(1)
  [17] => int(1)
  [18] => int(1)
  [19] => int(1)
  [20] => int(0)
  [21] => int(0)
}
</pre>
把总数amount拆分以标准差最小的标准,平均拆分成count个整数的更多相关文章
- 5.数字拆分成4段,怎样使得4段的乘积最小【dp】
		题目是:给出一个数字(10,000-100,000,000),把这个数字拆分成4段,怎样使得4段的乘积最小.比如12345拆分成1*2*3*45=270, 10000=1*00*0*0=0. 解题分析 ... 
- ch1_5_1统计最大最小元素的平均比较次数
		public class ch1_5_1统计最大最小元素的平均比较次数 { public static void main(String[] args) { // TODO Auto-generate ... 
- 运筹学之"最大最大决策标准"和"最大最小决策标准"
		一.最大最大决策标准的解题思路就是:先比较出所有行的最大值,在最大值中选出最大值,最后这个最大是那行的就选哪个方案 二.最大最小决策标准的解题思路就是:先比较出所有行的最小值,在最小值中选出最大值,最 ... 
- hdu4289 最小割最大流 (拆点最大流)
		最小割最大流定理:(参考刘汝佳p369)增广路算法结束时,令已标号结点(a[u]>0的结点)集合为S,其他结点集合为T=V-S,则(S,T)是图的s-t最小割. Problem Descript ... 
- BZOJ-1877     晨跑       最小费用最大流+拆点
		其实我是不想做这种水题的QWQ,没办法,剧情需要 1877: [SDOI2009]晨跑 Time Limit: 4 Sec Memory Limit: 64 MB Submit: 1704 Solve ... 
- BZOJ-2324    营救皮卡丘      最小费用可行流+拆下界+Floyd预处理
		准备一周多的期末,各种爆炸,回来后状态下滑巨快...调了一晚上+80%下午 2324: [ZJOI2011]营救皮卡丘 Time Limit: 10 Sec Memory Limit: 256 MB ... 
- BZOJ-1070  修车    最小费用最大流+拆点+略坑建图
		1070: [SCOI2007]修车 Time Limit: 1 Sec Memory Limit: 162 MB Submit: 3624 Solved: 1452 [Submit][Status] ... 
- UVa 1658 - Admiral(最小费用最大流 + 拆点)
		链接: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ... 
- hdu 2098 分拆素数和(一个偶数拆分成两个不同素数和 拆法数量)
		传送门: http://acm.hdu.edu.cn/showproblem.php?pid=2098 分拆素数和 Time Limit: 1000/1000 MS (Java/Others) ... 
随机推荐
- 【贪心】Moving Tables POJ 1083
			题目链接:http://poj.org/problem?id=1083 题目大意:走廊上的房间如下图设置,现在有n个移动桌子的任务,把桌子从xi移动到yi(整个过程中会占用xi到yi房间之间的走廊), ... 
- ElementUI入门和NodeJS环境搭建
			1. ElementUI简介 我们学习VUE,知道它的核心思想式组件和数据驱动,但是每一个组件都需要自己编写模板,样式,添加事件,数据等是非常麻烦的, 所以饿了吗推出了基于VUE2.0的组件库,它 ... 
- saltstack 发布 iis 站点
			Saltstack 发布 iis 站点 saltstack 主服务器配置:切换到 salt 的主目录下 : 主目录示例:/home/salt 程序集放置目录: web/web1 sls 目录: web ... 
- C结构体struct 和 共用体union的使用测试
			#include <stdio.h> struct { char name[10]; char sex; char job; int num; union{ //联合只能共用同一个内存 i ... 
- 洛谷P5098 洞穴里的牛之三
			题目 贪心,可以用分类讨论的方法,可以得出如果\(n^2\)枚举则会过不了,而我们观察原题中的式子,有: \(∣x1−x2∣+∣y1−y2∣\) 发现式子中的绝对值很恶心,而考虑如果没有绝对值的话会有 ... 
- Transform详解(超详细) Attention is all you need论文
			一.背景 自从Attention机制在提出 之后,加入Attention的Seq2 Seq模型在各个任务上都有了提升,所以现在的seq2seq模型指的都是结合rnn和attention的模型.传统的基 ... 
- Codeforces 1172D. Nauuo and Portals 构造
			原文链接www.cnblogs.com/zhouzhendong/p/CF1172D.html 前言 明哥神仙打cf方式真潇洒.45分钟切D后就不打了? 我当场爆肝D想错方向不会做自闭了. 题解 考虑 ... 
- java如何实现多线程?线程的状态有哪些?
			java实现多线程有两种方法 1.继承Thread类 2.实现Runnable接口 这两种方法的共同点: 不论用哪种方法,都必须用Thread(如果是Thead子类就用它本身) ... 
- radio得值
			$('input[name="ylqxjylcldnbModel.jylb"]:checked').val(); <input type="radio" ... 
- fluent懒人篇之journal的用法【转载】
			转载地址:http://blog.sina.cn/dpool/blog/s/blog_63a80e870100oblp.html?type=-1 当你在用fluent计算大量类似算例,重复着相同操作的 ... 
