ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[原创] 2014新年元旦第一强帖:实用凑数凑金额高效递归剪枝算法

  [复制链接]

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-1-30 09:10 | 显示全部楼层
本帖已被收录到知识树中,索引项:递归
feixiangye 发表于 2018-1-30 08:53
香川老师,非常感谢您分享的这个高效凑数程序,在工作中经常用到节约了很多时间,工作中这组数只要运行下程 ...

原始数据都是偶数,无法计算得到奇数结果!

可以把目标数24869改为 24868 或 24870 都可以秒出结果。

TA的精华主题

TA的得分主题

发表于 2018-1-30 09:19 | 显示全部楼层
香川群子 发表于 2018-1-30 09:10
原始数据都是偶数,无法计算得到奇数结果!

可以把目标数24869改为 24868 或 24870 都可以秒出结果。

明白了,非常感谢香川老师

TA的精华主题

TA的得分主题

发表于 2018-1-30 09:39 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
香川群子 发表于 2018-1-30 09:10
原始数据都是偶数,无法计算得到奇数结果!

可以把目标数24869改为 24868 或 24870 都可以秒出结果。

香川老师,烦请您能否帮忙增加一句代码,当原始数据都是偶数,需要凑奇数或全是奇数凑偶数时程序自动结束并提醒,因为此情形工作中比较少见,当偶尔出现时运行程序后所有打开的excel都会死机,没有及时保存的Excel资料就会丢失,谢谢!

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-1-30 10:30 | 显示全部楼层
feixiangye 发表于 2018-1-30 09:39
香川老师,烦请您能否帮忙增加一句代码,当原始数据都是偶数,需要凑奇数或全是奇数凑偶数时程序自动结束并 ...

哈哈哈,这个要求很奇特。

你可以自己想办法事先确认一下数据的奇偶性,用公式就可以。

TA的精华主题

TA的得分主题

发表于 2018-1-30 10:58 | 显示全部楼层
香川群子 发表于 2018-1-30 10:30
哈哈哈,这个要求很奇特。

你可以自己想办法事先确认一下数据的奇偶性,用公式就可以。

好吧,因现实工作中用到这个程序非常频繁,需要经常用到这个程序来完成凑数后再进行另外的数据调整,每次先用公式判断一下会有点繁琐,还是非常感谢香川老师无私分享这个程序,工作上真的帮了很大的忙,以前都是手工一个个凑数还经常出错,真心谢谢您!

TA的精华主题

TA的得分主题

发表于 2018-2-23 10:00 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
香川群子 发表于 2014-1-1 20:07
sheet2中有三个论坛里较难解决的求助帖,作为案例。

用通常的方法是难以得到解答,但用我的程序适当调整 ...

老师,QQ上给您咨询了。您的凑数表,左侧是我现在已经有的发票税额,右侧是我需要凑的税额总数。为什么计算无结果,至少也要有一个接近的组合出来啊。我哪里设置不对了吗?求解

TA的精华主题

TA的得分主题

发表于 2018-2-23 12:41 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
一看就是个好帖子,有时间下载下来慢慢研究!

TA的精华主题

TA的得分主题

发表于 2018-3-3 14:48 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2018-3-6 14:06 | 显示全部楼层
女侠 为什么我按你的方法 所有数字都乘以100就去掉小数位了 然后运行跑了10分钟就不动弹了是为什么呢? 附件.rar (27.9 KB, 下载次数: 12)


TA的精华主题

TA的得分主题

 楼主| 发表于 2018-3-6 16:48 | 显示全部楼层
本帖最后由 香川群子 于 2018-3-6 17:23 编辑
wsadbzxc 发表于 2018-3-6 14:06
女侠 为什么我按你的方法 所有数字都乘以100就去掉小数位了 然后运行跑了10分钟就不动弹了是为什么呢?

...

你的数据中含有21个负数。

每增加一个负数,计算量增加1个量级。
所以,你的组合计算总量,已经非常之大了。


如果需要尽快得到计算结果,那么最好不要含有负数。
或者,设置B10单元格中递归计算深度为<200万次。

我用你的数据模拟了一下,
设置计算范围:4252918457~4252980000 (相当于-4小数位精度,不设置范围则很难计算得到结果)
设置小数点=-2,(大于-2则计算整数位溢出。)
递归计算深度200万时,得到一组近似解:

4252969504

组合明细:
+5850595320+4240130950+333040057+101805312+6128205+4220000+2393163+960000-1451453-2000000-3705999-4500000-5022900-5448860-10664840-11652384-13980522-14000000-15037945-20000050-21750285-30052816-38000000-39522525-53390000-107692307-327563998-5560866619

以上
又,假如举例计算范围:4252000000~4252500000
计算结果有5组解:
4252009504
4252027794
4252160481
4252258071
4252387698


您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-17 20:30 , Processed in 0.046752 second(s), 7 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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