ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

求救一道经典算法问题

[复制链接]

TA的精华主题

TA的得分主题

发表于 2012-10-11 20:00 | 显示全部楼层
goots 发表于 2003-11-5 12:51
我认识的一位朋友,自己用FOXPRO开发了我所提到的两个软件。
但他对源代码特保密!!
我们还是自己动手吧 ...

效果怎么样呢,让他展示给我们看一下吧,无偿的不行,有偿可以得到代码吗!

TA的精华主题

TA的得分主题

发表于 2013-10-15 13:28 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2013-11-9 07:29 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2013-11-9 19:26 | 显示全部楼层
wangyuwy 发表于 2003-10-14 10:39
在30楼提供的方法中是将2000分成101,201,301,401时所取的方案的具体例子,实际中即使切分成任何可确定的 ...

生成全部整数分割方案的代码:


  1. Sub DivNum()
  2.     Dim a, i&, j&, k&, m&, n&, s$, tms#
  3.    
  4.     m = Val(InputBox("整料标准长度:", "整数分割方案", 2000))
  5.     a = Split(InputBox("各种小料规格,以逗号分割:", "整数分割方案", "101,201,301,401"), ",")
  6.     tms = Timer
  7.    
  8.     n = UBound(a)
  9.     ReDim b&(n)
  10.     ReDim c(n + 2, 65535)
  11.     b(0) = m
  12.     For i = n To 1 Step -1
  13.         b(i) = b(0) \ a(i)
  14.         b(0) = b(0) Mod a(i)
  15.     Next
  16.    
  17.     For j = 1 To 65534
  18.         If b(0) < a(0) Then
  19.             s = ""
  20.         Else
  21.             s = "+" & a(0) & "*" & b(0) \ a(0)
  22.             c(0, j) = b(0) \ a(0)
  23.         End If
  24.         For i = 1 To n
  25.             If b(i) > 0 Then
  26.                 c(i, j) = b(i)
  27.                 s = s & "+" & a(i) & "*" & b(i)
  28.             End If
  29.         Next
  30.         c(n + 1, j) = "=" & Mid(s, 2)
  31.         c(n + 2, j) = s
  32.         
  33.         For i = 1 To n
  34.             If b(i) > 0 Then
  35.                 b(i) = b(i) - 1
  36.                 b(0) = b(0) + a(i)
  37.                 For k = i - 1 To 1 Step -1
  38.                     b(k) = b(0) \ a(k)
  39.                     b(0) = b(0) Mod a(k)
  40.                 Next
  41.                 GoTo Nxt
  42.             End If
  43.         Next
  44.         GoTo Ext
  45. Nxt:
  46.     Next
  47.     MsgBox "Over ! ": Exit Sub
  48. Ext:
  49.     MsgBox Format(Timer - tms, "0.000s ") & j
  50.     For i = 0 To n
  51.         c(i, 0) = a(i)
  52.     Next
  53.     c(n + 1, 0) = m
  54.     c(n + 2, 0) = j
  55.    
  56.     ReDim Preserve c(n + 2, j)
  57.     [a1].CurrentRegion = ""
  58.     [a1].Resize(j + 1, n + 3) = WorksheetFunction.Transpose(c)
  59.    
  60. End Sub
复制代码
整料分割方案.rar (13.74 KB, 下载次数: 53)

TA的精华主题

TA的得分主题

发表于 2013-11-9 19:35 | 显示全部楼层
我以前提过类似的问题……一定数额的金额,要求拆分成各种票面的币值,求全部组合方案。

可惜无人理睬。
http://club.excelhome.net/thread-793469-1-1.html

TA的精华主题

TA的得分主题

发表于 2013-11-9 19:40 | 显示全部楼层
henryw 发表于 2003-10-15 08:02
所以我总是怀疑题目说的或许是,对于101,201,301,401四种都是有规定出产数量的,要满足这些规定出产数量,求 ...

如果是这样的要求,会更复杂……

但其实也是可以这么来思考的:
挑选其中需求量最大的料,从有限的固定长度分配方案中找到对于此料效率最高的方案,
优先处理。

这样,到最后剩余料就会变得很少,几乎等价于基本方案的组合了。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-7-1 06:39 , Processed in 0.040597 second(s), 8 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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