Excel VBA 编程题

请高手帮忙,我要用VBA实现一个功能。比如有一行数值数据A1,B1,C1,D1,E1,F1,G1....(少于10个)另外有一个常量X。规则如下:1.任意几个连续数值和小... 请高手帮忙,

我要用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穷举所有排列组合然后做判断,不知道有啥好算法。
展开
 我来答
scmMigrant
2009-04-16
知道答主
回答量:26
采纳率:0%
帮助的人:0
展开全部
我用了两重循环,中友返带间的两个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)

Loop While tmp < X And i < 10
For j = i_old To i - 1
.Cells(2, By) = .Cells(2, By) & "A" & j & " "
Next
i_old = i
If i_old = n Then
By = By + 1
.Cells(2, By) = .Cells(2, By) & "A" & n & " "
End If
tmp = 0
By = By + 1
i = i - 1
Loop Until i_old >= n
End With
End Sub
百事牛
2024-10-22 广告
百事牛是共享提供商,我们提供可靠有效的服务,适当合理的授权费有利于的继续更新优化。同样的事情,同样的方法,百事牛团队十年磨一剑,始终至聚焦在密码恢复领域,深耕于此,我们已研制出有别于其他公司的算法和运算模式, 百事牛的暴力模式加入了分布式点... 点击进入详情页
本回答由百事牛提供
HuaGeG
2009-04-10 · TA获得超过7706个赞
知道大有可为答主
回答量:8038
采纳率:26%
帮助的人:2185万
展开全部
a2=a1
b2=IF(ISNUMBER(A2),IF(A2+B1<45,A2+B1,"X"),A1+B1),搭伍向右拖。

在轮枝滚此基腊余础上去编程。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
同意所有条款
2009-04-10 · TA获得超过3293个赞
知道小有建树答主
回答量:1147
采纳率:100%
帮助的人:457万
展开全部
这么复杂的问题就给20分,算了算了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式