Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 2878|回复: 6

[已解决]VBA设有1克,2克,3克,5克,10克,20克的砝码各若干枚,问用这些砝码可以称出

[复制链接]
发表于 2016-3-5 16:55 | 显示全部楼层 |阅读模式

VBA设有1克,2克,3克,5克,10克,20克的砝码各若干枚,问用这些砝码可以称出


多少种不同的质量(设砝码的总重量不超过1000克,且砝码只能放在平下的一端)?

要求:输入A1  A2  A3 A4  A5 A6

表示1克砝码有A1个,2克砝码有A2个,.......

输出方式TOTAL
最佳答案
2016-3-7 10:40
暴搜。
  1. Sub tt()
  2.     Dim A1%, A2%, A3%, A4%, A5%, A6%
  3.     Dim brr()
  4.     A1 = 1: A2 = 15: A3 = 30
  5.     A4 = 10: A5 = 12: A6 = 30
  6.     s = 1 * A1 + 2 * A2 + 3 * A3 + 5 * A4 + 10 * A5 + 20 * A6
  7.     ReDim arr(s)
  8.     For x1 = 0 To A1: For x2 = 0 To A2: For x3 = 0 To A3: For x4 = 0 To A4: For x5 = 0 To A5: For x6 = 0 To A6
  9.         s = 1 * x1 + 2 * x2 + 3 * x3 + 5 * x4 + 10 * x5 + 20 * x6
  10.         arr(s) = 1
  11.     Next: Next: Next: Next: Next: Next
  12.     For i = 1 To IIf(s > 1000, 1000, s)
  13.         If arr(i) = 1 Then
  14.             m = m + 1
  15.             ReDim Preserve brr(1 To m)
  16.             brr(m) = i
  17.         End If
  18.     Next
  19.     Range("A1") = "总共有" & m & "种质量可被称出"
  20.     Range("A2") = Join(brr, ",")
  21. End Sub
复制代码
发表于 2016-3-7 08:38 | 显示全部楼层
你这问题问错了吧。

砝码的总重量不超过1000克、那么1000克以内任意质量都可以称。

…………
我猜你要问的是:
对于1-1000范围内任意1个整数N,如何分解为由任意1、2、3、5、10、20这6个数的组合。
这样的组合有多少?

……
告诉你:
N=100 可能组合数K=34210
N=200 可能组合数K=717308
N=250 可能组合数K=1999139
……
N=1000时,组合数肯定是1个天文数字了。
回复

使用道具 举报

发表于 2016-3-7 08:39 | 显示全部楼层
本帖最后由 香川群子 于 2016-3-7 08:41 编辑

N=20时 有组合解K=113

格式:砝码数量*砝码质量g
如 1*20 表示需 20g砝码1个。 20*1 表示需 1g砝码20个。

+1*20
+2*10
+2*5+1*10
+1*2+1*3+1*5+1*10
+2*1+1*3+1*5+1*10
+1*1+2*2+1*5+1*10
+3*1+1*2+1*5+1*10
+5*1+1*5+1*10
+1*1+3*3+1*10
+2*2+2*3+1*10
+2*1+1*2+2*3+1*10
+4*1+2*3+1*10
+1*1+3*2+1*3+1*10
+3*1+2*2+1*3+1*10
+5*1+1*2+1*3+1*10
+7*1+1*3+1*10
+5*2+1*10
+2*1+4*2+1*10
+4*1+3*2+1*10
+6*1+2*2+1*10
+8*1+1*2+1*10
+10*1+1*10
+4*5
+1*2+1*3+3*5
+2*1+1*3+3*5
+1*1+2*2+3*5
+3*1+1*2+3*5
+5*1+3*5
+1*1+3*3+2*5
+2*2+2*3+2*5
+2*1+1*2+2*3+2*5
+4*1+2*3+2*5
+1*1+3*2+1*3+2*5
+3*1+2*2+1*3+2*5
+5*1+1*2+1*3+2*5
+7*1+1*3+2*5
+5*2+2*5
+2*1+4*2+2*5
+4*1+3*2+2*5
+6*1+2*2+2*5
+8*1+1*2+2*5
+10*1+2*5
+5*3+1*5
+1*1+1*2+4*3+1*5
+3*1+4*3+1*5
+3*2+3*3+1*5
+2*1+2*2+3*3+1*5
+4*1+1*2+3*3+1*5
+6*1+3*3+1*5
+1*1+4*2+2*3+1*5
+3*1+3*2+2*3+1*5
+5*1+2*2+2*3+1*5
+7*1+1*2+2*3+1*5
+9*1+2*3+1*5
+6*2+1*3+1*5
+2*1+5*2+1*3+1*5
+4*1+4*2+1*3+1*5
+6*1+3*2+1*3+1*5
+8*1+2*2+1*3+1*5
+10*1+1*2+1*3+1*5
+12*1+1*3+1*5
+1*1+7*2+1*5
+3*1+6*2+1*5
+5*1+5*2+1*5
+7*1+4*2+1*5
+9*1+3*2+1*5
+11*1+2*2+1*5
+13*1+1*2+1*5
+15*1+1*5
+1*2+6*3
+2*1+6*3
+1*1+2*2+5*3
+3*1+1*2+5*3
+5*1+5*3
+4*2+4*3
+2*1+3*2+4*3
+4*1+2*2+4*3
+6*1+1*2+4*3
+8*1+4*3
+1*1+5*2+3*3
+3*1+4*2+3*3
+5*1+3*2+3*3
+7*1+2*2+3*3
+9*1+1*2+3*3
+11*1+3*3
+7*2+2*3
+2*1+6*2+2*3
+4*1+5*2+2*3
+6*1+4*2+2*3
+8*1+3*2+2*3
+10*1+2*2+2*3
+12*1+1*2+2*3
+14*1+2*3
+1*1+8*2+1*3
+3*1+7*2+1*3
+5*1+6*2+1*3
+7*1+5*2+1*3
+9*1+4*2+1*3
+11*1+3*2+1*3
+13*1+2*2+1*3
+15*1+1*2+1*3
+17*1+1*3
+10*2
+2*1+9*2
+4*1+8*2
+6*1+7*2
+8*1+6*2
+10*1+5*2
+12*1+4*2
+14*1+3*2
+16*1+2*2
+18*1+1*2
+20*1

评分

参与人数 1 +6 收起 理由
vbyou127 + 6

查看全部评分

回复

使用道具 举报

发表于 2016-3-7 10:40 | 显示全部楼层    本楼为最佳答案   
暴搜。
  1. Sub tt()
  2.     Dim A1%, A2%, A3%, A4%, A5%, A6%
  3.     Dim brr()
  4.     A1 = 1: A2 = 15: A3 = 30
  5.     A4 = 10: A5 = 12: A6 = 30
  6.     s = 1 * A1 + 2 * A2 + 3 * A3 + 5 * A4 + 10 * A5 + 20 * A6
  7.     ReDim arr(s)
  8.     For x1 = 0 To A1: For x2 = 0 To A2: For x3 = 0 To A3: For x4 = 0 To A4: For x5 = 0 To A5: For x6 = 0 To A6
  9.         s = 1 * x1 + 2 * x2 + 3 * x3 + 5 * x4 + 10 * x5 + 20 * x6
  10.         arr(s) = 1
  11.     Next: Next: Next: Next: Next: Next
  12.     For i = 1 To IIf(s > 1000, 1000, s)
  13.         If arr(i) = 1 Then
  14.             m = m + 1
  15.             ReDim Preserve brr(1 To m)
  16.             brr(m) = i
  17.         End If
  18.     Next
  19.     Range("A1") = "总共有" & m & "种质量可被称出"
  20.     Range("A2") = Join(brr, ",")
  21. End Sub
复制代码

评分

参与人数 1 +6 收起 理由
vbyou127 + 6 还可以优化

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2016-3-7 19:01 | 显示全部楼层
香川群子 发表于 2016-3-7 08:38
你这问题问错了吧。

砝码的总重量不超过1000克、那么1000克以内任意质量都可以称。

一直以来你是个世外高人,这条相信你也不会做 http://www.excelpx.com/thread-386086-1-1.html

2个1克的砝码与1个2克的砝码所产生的效果一样,当两种不同砝码组合

所称出的重量相同时,再加上其他的相同的砝码,其称出的质量也必然相同


回复

使用道具 举报

发表于 2016-3-8 09:27 | 显示全部楼层
grf1973 发表于 2016-3-7 10:40
暴搜。

你这段代码得到的结果m=891,其实只需一个sumproduct公式计算一下即可。呵呵。

不过,说实话我并没有完全理解楼主到底想要做什么。
回复

使用道具 举报

 楼主| 发表于 2016-3-8 13:50 | 显示全部楼层
香川群子 发表于 2016-3-8 09:27
你这段代码得到的结果m=891,其实只需一个sumproduct公式计算一下即可。呵呵。

不过,说实话我并没有完 ...

因为你笨所以不明白
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-27 02:02 , Processed in 0.732420 second(s), 12 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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