把总数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) ...
随机推荐
- 物体检测方法(1) - YOLO 详解
最近遇到一些卡证识别的检测问题,打算先把理论知识梳理一下,随后还会梳理一版代码注释. 以前的region+proposal来检测的框架,这一系列速度和精度不断提高,但是还是无法达到实时.存在的主要问题 ...
- linux虚拟机互访
我们是按照一个小组有6个人在linux虚拟机中一个网卡配置三个ip:172.16.31.xxx; 192.168.180.xxx; 192.168.180.50+xxx;并且6台虚拟机还能够进行 ...
- C++ error C2015: too many characters in constant
错误原因:字符常量中的字符太多了. 错误分析: 单引号表示字符型常量. 一般的,单引号中必须有,也只能有一个字符(使用转义符时,转义符所表示的字符当作一个字符看待),如果单引号中的字符数多于4个,就会 ...
- javaweb上传文件夹
我们平时经常做的是上传文件,上传文件夹与上传文件类似,但也有一些不同之处,这次做了上传文件夹就记录下以备后用. 首先我们需要了解的是上传文件三要素: 1.表单提交方式:post (get方式提交有大小 ...
- CF463D Gargari and Permutations dp
给定 $n<=10$ 个 $1$~$n$ 的排列,求这些排列的 $LCS$. 考虑两个排列怎么做:以第一个序列为基准,将第二个序列的元素按照该元素在第一个序列中出现位置重新编号. 然后,求一个 ...
- 洛谷P3178[HAOI]2015 树上操作
题目 树剖裸题,这个题更可以深刻的理解树剖中把树上的节点转换为区间的思想. 要注意在区间上连续的节点,一定是在一棵子树中. #include <bits/stdc++.h> #define ...
- Software Project Management_JUnit && Maven
Task1: Develop the project “HelloWorld” -A .java program: Just print out “Hello” + your name; -A tes ...
- Cannot start compilation: the output path is not specified for module "salesystem". Specify the output path in Configure Project.
错误是发生在从github上checkout自己的项目时.因为没有将配置文件一起上传,所以在运行java程序时有了这个报错: Cannot start compilation: the output ...
- QtCore概述
所有其他Qt模块都依赖于这个模块. 要包含模块类的定义,请使用以下指令: include < QtCore > 如果您使用qmake来构建您的项目,则默认将QtCore包含在内. 核心功能 ...
- Python 3.8.0 final¶ Release date: 2019-10-14
https://docs.python.org/3.8/whatsnew/changelog.html#python-3-8-0 Core and Builtins bpo-38469: Fixed ...