Excel VBA 编程题

来源:百度知道 编辑:UC知道 时间:2024/06/16 08:42:04
请高手帮忙,

我要用VBA实现一个功能。比如有一行数值数据A1,B1,C1,D1,E1,F1,G1....(少于10个)
另外有一个常量X。规则如下:
1.任意几个连续数值和小于X,则作为一个组。
2.所有数值只能属于一个组。
2.找出组的数量最少的分割方法并归类到第二行。

举个例子。
A1= 30; B1 = 10;C1 = 30;D1 = 10;另外X=45.
那么分割方法有几种:AB,CD;或者A,BC,D;显然第一种分法比第二种少了一组,那么取第一种分割法,并在A2返回"A1"&"B1",B2返回"C1"&"D1"
每天追加10分。。。看看啥时候高手能冒个泡。
目前用四层循环结合excel穷举所有排列组合然后做判断,不知道有啥好算法。

我用了两重循环,中间的两个for---next是用来输出答案的.在Input box中输入你的常量X,第一行你说少于10个,所以就只定义到A(10),如果要更多,你只要修改数组长度,当然,你也可以用自定义数组,呵呵,随你喜欢.因为你说是连续数值,所以简单很多啦.源代码如下,你可以自己在第一行输入10个以内的数字试下,应该没问题的.
希望可以帮助,也希望有更好的算法:
Option Explicit
Public Sub Best_combination()
Dim X As Long, n As Integer, i As Long, tmp As Long, ans As String, By As Integer
Dim j As Integer, i_old As Integer
Sheets("sheet1").Select
Sheets("sheet1").Rows("2:2").Clear
X = InputBox("please specify the constant")
Sheets("sheet1").Cells(3, 1) = X
n = Sheets("sheet1").Range("a1").CurrentRegion.Columns.Count
Dim A(10) As Long
With Sheets("sheet1")
For i = 1 To n
A(i) = .Cells(1, i)
Next
tmp = 0: i = 0: By = 1: i_old = 1
Do
Do
i = i + 1
tmp = tmp + A(i)