|
wangyuwy 发表于 2003-10-14 10:39 ![](static/image/common/back.gif)
在30楼提供的方法中是将2000分成101,201,301,401时所取的方案的具体例子,实际中即使切分成任何可确定的 ...
生成全部整数分割方案的代码:
- Sub DivNum()
- Dim a, i&, j&, k&, m&, n&, s$, tms#
-
- m = Val(InputBox("整料标准长度:", "整数分割方案", 2000))
- a = Split(InputBox("各种小料规格,以逗号分割:", "整数分割方案", "101,201,301,401"), ",")
- tms = Timer
-
- n = UBound(a)
- ReDim b&(n)
- ReDim c(n + 2, 65535)
- b(0) = m
- For i = n To 1 Step -1
- b(i) = b(0) \ a(i)
- b(0) = b(0) Mod a(i)
- Next
-
- For j = 1 To 65534
- If b(0) < a(0) Then
- s = ""
- Else
- s = "+" & a(0) & "*" & b(0) \ a(0)
- c(0, j) = b(0) \ a(0)
- End If
- For i = 1 To n
- If b(i) > 0 Then
- c(i, j) = b(i)
- s = s & "+" & a(i) & "*" & b(i)
- End If
- Next
- c(n + 1, j) = "=" & Mid(s, 2)
- c(n + 2, j) = s
-
- For i = 1 To n
- If b(i) > 0 Then
- b(i) = b(i) - 1
- b(0) = b(0) + a(i)
- For k = i - 1 To 1 Step -1
- b(k) = b(0) \ a(k)
- b(0) = b(0) Mod a(k)
- Next
- GoTo Nxt
- End If
- Next
- GoTo Ext
- Nxt:
- Next
- MsgBox "Over ! ": Exit Sub
- Ext:
- MsgBox Format(Timer - tms, "0.000s ") & j
- For i = 0 To n
- c(i, 0) = a(i)
- Next
- c(n + 1, 0) = m
- c(n + 2, 0) = j
-
- ReDim Preserve c(n + 2, j)
- [a1].CurrentRegion = ""
- [a1].Resize(j + 1, n + 3) = WorksheetFunction.Transpose(c)
-
- End Sub
复制代码
整料分割方案.rar
(13.74 KB, 下载次数: 53)
|
|