level 1
你的意思是不是这个:
有一个数组,随机抽五个数,之和满足一个范围时,输出这五个数。要输出所有满足单位的五个数的情况。
2023年01月23日 05点01分
3
如果是,你得告诉我你的数组用的变量名称是什么
2023年01月23日 05点01分
应该不是随机5个数,而是连续5个数
2023年01月23日 06点01分
还有数组的变量类型与数组编号最小值是0还是1
2023年01月23日 06点01分
@初音✨七奈 我看着是要列出所有情况,那本质上这个题目就是五个数的所有排列组合
2023年01月23日 06点01分
level 1
Dim a()'记录数组
Dim Sum '计算五个数之和,变量类型与数组类型相同
For i = 1 to ubound(a) - 4'如果数组从0开始,1要改成0
For j = i to ubound(a) - 3
For k = j to ubound(a) - 2
For l = k to ubound(a) - 1
For m = l to ubound(a)
Sum = a(i) + a(j) + a(k) + a(l) + a(m)
If …… Then '此处写判断条件
'此处写输出代码
End If
Next
Next
Next
Next
Next
2023年01月23日 06点01分
4
代码是手机打的,可能会出小问题。如果数组本身不是从大到小排列,输出时要排序
2023年01月23日 06点01分
level 4
我想用记录数组中的只5个数相加,和值定在一个范围内,比如大于50小于120,然后把所有满足条件的5个从小到大显示在list中
Dim i As Integer, j As Integer, k As Integer, l As Integer, m As Integer, a As Integer 'q As Integer
Dim a(5, 6, 7, 8, 9, 13, 16, 18, 25, 26, 29, 30) '记录数组
For i = 1 To UBound(a) - 4
For j = i To UBound(a) - 3
For k = j To UBound(a) - 2
For l = k To UBound(a) - 1
For m = l To UBound(a)
Sum = a(i) + a(j) + a(k) + a(l) + a(m)
If Sum > 50 And Sum < 120 Then
List1.AddItem a(i) & "," & a(j) & "," & a(k) & "," & a(l) & "," & a(m)
End If
Next
Next
Next
Next
Next
2023年01月23日 08点01分
5
level 1
大佬代码还能再简化一下,这个题目用不到使用词典工程:
Dim TheArray As Variant '定义待列举数组
Private Sub Command1_Click()
List1.Clear '清楚list1中数据
TheArray = Array(5, 6, 7, 8, 9, 13, 16, 18, 25, 26, 29, 30) '输入待列举数组内容
Call Combinarray(UBound(TheArray), 5) '列举数组,每五个为一组
End Sub
'列举数组的所有组合函数
'将数组TheArray()中的元素,列举其中Num个元素的所有组合,并处理
'TheArray:=要组合的数组(需提前设置全局变量),Pointer:=当前运行至第X个数(运行时反向历遍,故调用函数时应输入数组的上标)
'Num:=随机组合个数(重复运行时,该变量代表还需运行的次数),Result:=结果(用英文逗号隔开)
Sub Combinarray(ByVal Pointer As Long, ByVal Num As Long, Optional ByVal Result As String = "")
If Num = 0 Then Call PrintResult(Mid(Result, 2)): Exit Sub '不需要继续重复运行时,输出列举结果并退出重复运行
'反向历遍元素,依次列举。当Pointer小于零即无剩余元素且未列举出足够的元素时,将直接跳过For循环结束历遍。
'如果声明数组下标的缺省下界为1,此处应改为:For i = Pointer To 1 Step -1
For i = Pointer To 0 Step -1
'还需列举次数为当前运行至的元素编号(i)减一,当前运行指针减一,记录列举结果(由于运行时反向历遍元素,故反向添加加过)
Call Combinarray(i - 1, Num - 1, "," & TheArray(i) & Result)
Next
End Sub
'处理列举出的结果并输出
Sub PrintResult(ByVal Result As String)
Dim Sum As Long '记录结果之和
Dim Spl As Variant '用于分割
Spl = Split(Result, ",") '以逗号分割结果
For i = 0 To UBound(Spl) '累加结果,VB6.0无Evaluate函数,故出此下策
Sum = Sum + Val(Spl(i))
Next
If Sum > 50 And Sum < 120 Then List1.AddItem Result '判断是否满足条件,如果满足则输出结果
End Sub
2023年01月24日 13点01分
11
大佬代码运行不出的其中一个原因应该是VB6.0没有Evaluate函数,这个函数的作用是返回算式文本的计算结果。这里可以用其他办法计算结果之和。词典工程在这个题目中显得有些大材小用,可以用一个过程直接判断结果是否符合条件,然后输出。
2023年01月24日 13点01分
由于这里只要列举五个元素,运行速度方面,应该是直接用For循环速度更快。而大佬的方法更适合处理列举更多的元素。
2023年01月24日 14点01分
level 4
非常非常感谢,你看上去很欧和嘟嘟逸凡,还有各位提供建议的大佬们,现在程序使用中,祝大家新年快乐!
2023年01月25日 03点01分
12