在问一个关于数字的算法问题......

oop2000 2004-01-03 02:37:06
假设有一个数组arrX(36),在数组中分别存放>=1 and <=99的数字
比如:arrX(1)=12,arrX(2)=44..arrX(35)=67 排除arrX(0),不考虑它
现在要从这里面取出7个数字作为一组.并且这七个数字的和等于98(或者其它由用户输入的在7-99之间的数字)
比如:arrX(1)+arrX(2)+arrX(13)+....=98

得到这七个数组后,将这七个数组的索引进行排列.
2,3,5,6,7,9
2,5,3,6,7,9
2,5,3,7,6,9
................

可能会得到好几个相加的和等于98的数组.那么都对其进行排列..

紧紧.....谢谢...
另外请 northwolves(野性的呼唤) ( )
flyingscv(zlj) ( )
等在来看看...谢谢...
...全文
63 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
Huaraco 2004-01-03
  • 打赏
  • 举报
回复
为什么才给我10分,哭泣!!!
oop2000 2004-01-03
  • 打赏
  • 举报
回复
是彩票的软件.呵呵
oop2000 2004-01-03
  • 打赏
  • 举报
回复
对啊....谢谢楼上..万分感谢..
感谢..
结帐了..
northwolves 2004-01-03
  • 打赏
  • 举报
回复
多嘴了,你做彩票软件?
northwolves 2004-01-03
  • 打赏
  • 举报
回复
应该有更好的算法。
northwolves 2004-01-03
  • 打赏
  • 举报
回复
Function all(ByRef a() As Integer, ByVal sum As Integer)
Dim num As Integer
num = UBound(a)
If sum < 7 Or sum > 99 Then
Exit Function
Else
Dim temp() As String, k As Integer
k = 1
Dim x1 As Integer, x2 As Integer, x3 As Integer, x4 As Integer, x5 As Integer, x6 As Integer, x7 As Integer
For x1 = 1 To num - 6
For x2 = x1 + 1 To num - 5
For x3 = x2 + 1 To num - 4
For x4 = x3 + 1 To num - 3
For x5 = x4 + 1 To num - 2
For x6 = x5 + 1 To num - 1
For x7 = x6 + 1 To num
ReDim temp(k)
If a(x1) + a(x2) + a(x3) + a(x4) + a(x5) + a(x6) + a(x7) = sum Then temp(k) = x1 & "," & x2 & "," & x3 & "," & x4 & "," & x5 & "," & x6 & "," & x7 & "=" & a(x1) & "+" & a(x2) & "+" & a(x3) & "+" & a(x4) & "+" & a(x5) & "+" & a(x6) & "+" & a(x7) & " = " & sum: List1.AddItem temp(k): k = k & "+" & 1
Next
Next
Next
Next
Next
Next
Next
End If
all = temp
End Function


Private Sub Command1_Click()
Dim x(1 To 36) As Integer
For i = 1 To 36
x(i) = i
Next
MsgBox all(x(), 98)(0)
Me.Caption = List1.ListCount
End Sub

七重循环需要较长时间,没有调试。

oop2000 2004-01-03
  • 打赏
  • 举报
回复
谢谢各位.我分别试试..
Huaraco 2004-01-03
  • 打赏
  • 举报
回复
你是不是要对数据进行组合排列中的排列阿?
flyingscv 2004-01-03
  • 打赏
  • 举报
回复
这个是7个循环啊
例:得到总和为sum

以下代码要求arrx递增


for i1=1 to 36-6
for i2=i1+1 to 36-5
if arrx(i1)+arrx(i2)<sum then
for i3=i2+1 to 36-4
if arrx...+arrx(3)<sum then
.....
for i7=i6+1 to 36
if arrx(i1)+....+arr(i7)=sum then
print i1,i2,i3...,i7
end if
next i7
.....
end if
next i3
end if
next i2
next i1
Huaraco 2004-01-03
  • 打赏
  • 举报
回复
dim i(7) as integer

for i(0)= 1 to 36
for i(1)=1 to 36
for i(2)= 1 to 36
for i(3)=1 to 36
for i(4)= 1 to 36
for i(5)=1 to 36
for i(6)=1 to 36
if arrX(i(0))+arrX(i(1))+arrX(i(2))+....=98 then
? arrX(i(0))+arrX(i(1))+arrX(i(2))+....
end if

7个next

不知道是不是这个意思。
oop2000 2004-01-03
  • 打赏
  • 举报
回复
可以不排列,就是不要排列了.

7,763

社区成员

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

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