Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
12
返回列表 发新帖
楼主: vbyou127

[已解决]VBA如何把21分解为5个整数之和

[复制链接]
 楼主| 发表于 2016-3-30 13:24 | 显示全部楼层
香川群子 发表于 2016-3-30 13:11
如果理解正确,那么做法很简单:

1. 取21选5组合=Combin(21,5)=20349种组合。

如何写代码
excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
回复

使用道具 举报

发表于 2016-3-30 14:26 | 显示全部楼层
vbyou127 发表于 2016-3-30 13:24
如何写代码

代码需要整合两种组合算法。任意m个中选n的组合算法,以及生成所有2^n-1的完全组合的算法。

这两个组合算法我都有,但是需要合并起来……

如果你只是计算这一组特定结果,就没必要麻烦写代码了吧。呵呵。

回复

使用道具 举报

 楼主| 发表于 2016-3-30 15:59 | 显示全部楼层
香川群子 发表于 2016-3-30 14:26
代码需要整合两种组合算法。任意m个中选n的组合算法,以及生成所有2^n-1的完全组合的算法。

这两个组合 ...

谁说没有必要
回复

使用道具 举报

发表于 2016-3-30 16:29 | 显示全部楼层
vbyou127 发表于 2016-3-30 15:59
谁说没有必要

那你的问题是不是这个意思:

对于任意正整数m,求最少n个正整数,它们的组合之和可以覆盖[1,m]全范围。
并求出所有可能的组合。

最少个数n=-INT(-LOG(m,2)) (即2^n>=m)
m=21时,n=5

是这个意思吗?


好像之前有过这样类似的题目。
要求对于正整数m,在[1,m]范围内求最少n个正整数的集合,
然后可以按照任意2个数相加构成[1,m]范围内的其它有效数值,
直到最后其中的2个数加起来正好=m。

目的是,求n的最小值。
n的理论最大值=-INT(-LOG(m,2)) 即至多使用1,2,4,8……这样的n个2倍数集合,肯定可以得到解,
但这就不一定是最小值了。对于某些非2^n的正整数m来说,会有更好的办法得到更小的n值。

具体解法我要去查一下了。



回复

使用道具 举报

 楼主| 发表于 2016-3-30 17:03 | 显示全部楼层
香川群子 发表于 2016-3-30 16:29
那你的问题是不是这个意思:

对于任意正整数m,求最少n个正整数,它们的组合之和可以覆盖[1,m]全范围。 ...

两条差不多,看完下面这个或者你会完全明白了

这条更复杂http://www.excelpx.com/thread-387151-1-1.html


这条简化了http://www.excelpx.com/thread-387192-1-1.html


回复

使用道具 举报

发表于 2016-3-30 22:37 | 显示全部楼层
原来是这个意思。

5个数排成圆圈,(首尾相连)
然后,
1个数有5种
相邻2个数之和有5种
相邻3个数之和有5种
相邻4个数之和有5种
相邻5个数之和有1种

所以合起来是21种组合。它们最大能覆盖[1,21]的整数区域。
求全部排列组合。

回复

使用道具 举报

发表于 2016-3-31 14:37 | 显示全部楼层    本楼为最佳答案   
已经编程算出来了。满足条件的只有2组。且是镜像的。

1        3        10        2        5
1        5        2        10        3

评分

参与人数 1 +9 收起 理由
vbyou127 + 9 来学习

查看全部评分

回复

使用道具 举报

发表于 2016-4-1 16:19 | 显示全部楼层
香川群子 发表于 2016-3-31 14:37
已经编程算出来了。满足条件的只有2组。且是镜像的。

1        3        10        2        5

{:301:}好复杂的说
回复

使用道具 举报

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

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-5-4 15:27 , Processed in 0.353981 second(s), 13 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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