请高手帮我看一个问题 谢谢

游子 2009-01-24 11:08:02
在text1(0).text....text1(34)分别对应35个数字 分别是1-35,text1(0).text对应1.。。。text1(34).text对应35,注意是对应不是赋值,程序开始的时候会对text1(0).text到text1(34).text分别进行赋值,还有在text3和text4输入两个值组成一个区间,然后要把text1(0).text....text1(34).text中的任意7个相加得到的和值看在不在text3到text4这个区间内,如果在就把任意7个text1所对以的数字显示在text5里(注意是对应的数字,不是控件组的值)。要把里面每组都找出来,可以组成多少就显示多少 中间要用&隔开。如果没有就提示没有符合要求的数据。下面是代码 可是执行没有反应 请高手指点。谢谢。

Private Sub FindSumData(ByRef Data() As Double, ByRef FindData() As Long, ByVal FindLevel As Integer)
Dim FindSame As Boolean, i As Integer, t As Integer, Sum As Long, TempStr As String

FindLevel = FindLevel + 1
ReDim Preserve FindData(FindLevel) As Long

For i = 0 To 34
For t = LBound(FindData) + 1 To UBound(FindData)
If FindData(t) = i Then
FindSame = True
Exit For
End If
Next t
If Not FindSame Then
FindData(FindLevel) = i
If FindLevel <= 6 Then
Call FindSumData(Data, FindData, FindLevel)
Else
FindLevel = FindLevel - 1
TempStr = "组合号码:"
Sum = 0
For t = LBound(FindData) + 1 To UBound(FindData)
Sum = Sum + Data(FindData(t))
TempStr = TempStr & FindData(t) & ","
Next t
If Sum >= MinData And Sum <= MaxData Then
Text5.Text = Text5.Text & "Sum=" & Sum & " Between " & MinData & " and " & MaxData & TempStr & vbCrLf
Text5.SelStart = Len(Text5)
Total = Total + 1
End If
End If
End If
Next i
End Sub

谢谢
...全文
98 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
三楼の郎 2009-01-26
  • 打赏
  • 举报
回复
Sorry,是(35*34*33*32*31*30*29)/(7*6*5*4*3*2*1)种
三楼の郎 2009-01-26
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 fage168 的回复:]
这问题你不是问过了么,他们回答的都是不错的,不过你这个代码是用自建FindSumData函数来处理问题,那么其他人的回答就不能简单直接套用了,我只能说从1-34个数字中取7个的组合将非常非常多,很可能P4 3G的什么双核都要算不少时间(有可能以小时计)。。。。。。
[/Quote]

这能有多少,不就是(35*33*32*31*30*29)/(7*6*5*4*3*2*1)种嘛!
fage168 2009-01-26
  • 打赏
  • 举报
回复
上面的话我说得不准确,应是所有7个的组合,但循环没变。
fage168 2009-01-26
  • 打赏
  • 举报
回复
是(35*34*33*32*31*30*29)/(7*6*5*4*3*2*1)种,这没错,可是这是符合你的要求的组合,那不符合的去哪了?

想要找出所有的组合,你只能遍历所有循环,代码如下:
Dim i As Integer, j As Integer, k As Integer
Dim l As Integer, m As Integer, n As Integer, o As Integer

For i = 1 To 29
For j = 2 To 30
For k = 3 To 31
For l = 4 To 32
For m = 5 To 33
For n = 6 To 34
For o = 7 To 35
'这里加个语句判断上面这7个数不能相等

If i + j + k + l + m + n + o >= Val(text3.Text) And i + j + k + l + m + n + o <= Val(text4.Text) Then
输出
End If

Next
Next
Next
Next
Next
Next
Next

第一、共循环7个29相乘,上亿次了;
第二、这种循环相套的代码慢如蜗牛,请做好准备。

其实我猜你这个应该是搞彩票的,我也经常搞。
fage168 2009-01-25
  • 打赏
  • 举报
回复
这问题你不是问过了么,他们回答的都是不错的,不过你这个代码是用自建FindSumData函数来处理问题,那么其他人的回答就不能简单直接套用了,我只能说从1-34个数字中取7个的组合将非常非常多,很可能P4 3G的什么双核都要算不少时间(有可能以小时计)。。。。。。
用户 昵称 2009-01-25
  • 打赏
  • 举报
回复
春节快乐,没看懂问题呢。
游子 2009-01-25
  • 打赏
  • 举报
回复
这么高的分也没有人帮我。。

7,763

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧