ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 5366|回复: 10

[求助] 如何把总和为y的一组数字,尽可能平均的分成x份

[复制链接]

TA的精华主题

TA的得分主题

发表于 2014-12-16 20:52 | 显示全部楼层 |阅读模式
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 4424442 于 2014-12-18 20:11 编辑

如何把总和为y的一组数字,尽可能平均的分成x份(即每份之和尽可能等于y/x),其中有x个数字必须分到x份中去,每份个数不限。
实例:将总面积为18.61亩的19块田,尽可能平均的分成5股(即每份之和尽可能接近3.722亩),其中每股必须有一块烂田(下划线),每股田块数不限。
0.57
0.5
2.31
1.79
0.69
0.13
2.42
0.29
0.68
0.19
1.56
1.79
1.47
0.24
0.44
0.27
2.05
0.16
1.06

明细表.rar

6.67 KB, 下载次数: 10

TA的精华主题

TA的得分主题

发表于 2014-12-16 21:33 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
这个又属于凑数的问题了,只有用VBA才能解决啊

TA的精华主题

TA的得分主题

发表于 2014-12-17 08:53 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
只能是在一定范围之内吧。
用我的高级分组程序给你计算列出一部分 5组:

0.13+0.16+1.06+2.42=3.77
0.19+0.24+1.47+1.79=3.69
0.27+0.29+0.5+0.57+2.05=3.68
0.44+1.56+1.79=3.79
0.68+0.69+2.31=3.68
<OK>

0.13+0.16+1.06+2.42=3.77
0.19+0.24+1.56+1.79=3.78
0.27+0.29+0.5+0.57+2.05=3.68
0.44+1.47+1.79=3.7
0.68+0.69+2.31=3.68
<OK>

0.13+0.16+1.06+2.42=3.77
0.19+1.79+1.79=3.77
0.24+0.44+0.69+2.31=3.68
0.27+0.29+0.5+0.57+2.05=3.68
0.68+1.47+1.56=3.71
<OK>

0.13+0.16+1.06+2.42=3.77
0.19+1.79+1.79=3.77
0.24+0.44+1.47+1.56=3.71
0.27+0.29+0.5+0.57+2.05=3.68
0.68+0.69+2.31=3.68
<OK>

0.13+0.16+1.06+2.42=3.77
0.19+1.79+1.79=3.77
0.24+0.27+0.29+0.57+2.31=3.68
0.44+0.5+0.69+2.05=3.68
0.68+1.47+1.56=3.71
<OK>

但如果同时还要指定【烂田】就不容易了。

TA的精华主题

TA的得分主题

发表于 2014-12-17 10:24 | 显示全部楼层
按另外的思路,先分组再调整结果如下:

3.70 =0.16+0.24+0.44+0.5+0.57+1.79
3.67 =0.27+0.29+0.69
3.72 =0.19+0.68+1.06+1.79
3.78 =1.47+2.31
3.74 =0.13+1.56+2.05


Pic.jpg

TA的精华主题

TA的得分主题

发表于 2014-12-17 10:29 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
如果循环遍历所有组合,需要进行 =5^(19-5)=5^14=6,103,515,625 次计算。

这是近乎无法完成的。

TA的精华主题

TA的得分主题

发表于 2014-12-17 21:32 | 显示全部楼层
人工分吧,估计比电脑速度快得多。我自己手工分了一下,3分钟就搞定了,用电脑计算,半个小时还没计算完。测算了一下,如果电脑计算的话,要对几十亿个结果进行判断筛选,每个结果都要运算上千次,按照现在四核CPU电脑,都要连续计算N小时

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-12-17 23:07 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 4424442 于 2014-12-17 23:46 编辑

谢谢两位老师,实际中我需要处理70块田,平均分成11股。
我的出发点是希望借助程序,弥补人工的不足,得到最公平的结果,原以为很容易就能实现,听了两位老师的讲解,才知万难。
那么问题来了:
①究竟是我的思路不对,还是电脑速度不够快,假设有朝一日电脑速度足够快,这种方法是否最理想?
②目前主流电脑的运算速度究竟有多快?我查了一下,i3处理器2.4Ghz每秒能计算24亿次,那60多亿次的计算,岂不是几秒就能完成?




TA的精华主题

TA的得分主题

发表于 2014-12-18 13:00 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
4424442 发表于 2014-12-17 23:07
谢谢两位老师,实际中我需要处理70块田,平均分成11股。
我的出发点是希望借助程序,弥补人工的不足,得到 ...

【i3处理器2.4Ghz每秒能计算24亿次】

这个大概只是指电脑对机器码中二进制状态的处理速度。

实际: i = 1 这一句就需要至少几百次的计算了。

…………
在一般PC中,进行一次For i = 1 To 1000000 的百万次空循环,就需要 0.003秒了。
如果循环中加入最简单的 k = k + 1 则百万次耗时需0.01秒了。

TA的精华主题

TA的得分主题

发表于 2014-12-18 13:07 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
4424442 发表于 2014-12-17 23:07
谢谢两位老师,实际中我需要处理70块田,平均分成11股。
我的出发点是希望借助程序,弥补人工的不足,得到 ...

把你实际需要计算的数据,举几个例子上附件吧。

我帮你做一下:
① 按分组指定烂田、然后以凑数方式得到初步分组结果。 → 此时距离各组平均分配可能差距还较大。
② 用组间一对一分配调整的方法,求各组间差异最小的分组结果。

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-12-18 20:12 | 显示全部楼层
本帖最后由 4424442 于 2014-12-18 21:38 编辑
香川群子 发表于 2014-12-18 13:07
把你实际需要计算的数据,举几个例子上附件吧。

我帮你做一下:

已经上传附件,辛苦老师!
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-17 16:43 , Processed in 0.045229 second(s), 13 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表