大佬们,这题该怎么做
vb吧
全部回复
仅看楼主
level 5
@烟火 楼主
真的不知道怎么做了[泪]
2023年02月02日 13点02分 1
level 15
只需要产生5个数,你定义一个包含10个元素的数组干嘛?[滑稽]
来看你想问的问题,要统计“个位相同的数”的个数并输出其中的每个数,关键是需要记录每个数是否已经输出过了,比如前3个数的个位数都是相同的,先输出一次这3个数,然后再从第2个数开始判断时,就不需要再重复输出第2、3个数了
为了实现这个目的,可以建立一个标记数组,比如Dim b(1 To 5) As Boolean,初始值均为False,表示没有输出过;当判断出有个位相同的数时,输出这些数,并将数组b的对应元素标记为True,表示输出过了,后面就跳过这个数不再判断
统计及输出代码如下:
For i = 1 To 4
If Not b(i) Then '如果a(i)还没有输出过,则进行判断
For j = i + 1 To 5
If a(i) Mod 10 = a(j) Mod 10 Then
If Not b(i) Then Print a(i); '与第i个数个位相同的数可能不止一个,如果每判断出一个就输出一次第i个数也会造成重复,因此输出之前也判断一下是否输出过了
b(i) = True
Print a(j);
b(j) = True
End If
Next j
End If
Next i
2023年02月02日 15点02分 2
level 1
缩进不是给别人看的,是给自己看的。作用是循环、If等结构更加一目了然,尤其是多个甚至十几个循环叠加的时候。有的时候忘了打End If、Next、Loop、Wend等结束语句时容易查错。你这个缩进你自己看的不变扭吗。缩进不是用空格敲的,是用Tab敲的,更清楚,取消缩进可以直接删也可以用Shift+Tab。Tab操作可以选中多行统一缩进。
还有,你这个随机数生成有问题,你生成的是[10,69)的随机数,向下取整后是[10,68]
代码(百度会自动删掉前面的缩进):
Dim Num(1 To 5) As Integer '保存五个数字
Private Sub Command1_Click()
Label1.Caption = "" '清空Label1
Cls '清空窗口
Randomize '初始化随机数序列,如果这行缺少每次运行都将获得相同随机数
For i = 1 To 5
'随机数Rnd范围为[0,1),所以要生成[10,69]应该生成[10,70)的随机数并向下取整
Num(i) = Int(Rnd * 60 + 10)
Label1.Caption = Label1.Caption & Num(i) & " "
Next
End Sub
Private Sub Command2_Click()
Cls '清空
Dim NumPrint(1 To 5) As Boolean '记录5个数是否被输出过
For i = 1 To 5
If Not NumPrint(i) Then '如果这个数已经被输出,则不计算
For j = i + 1 To 5 '与其他数依次组合
If Num(i) Mod 10 = Num(j) Mod 10 Then '判断个位数是否相同
'如果相同
'如果第i个数还未被输出,则输出i
If Not NumPrint(i) Then Print Num(i);: NumPrint(i) = True
Print Num(j);: NumPrint(j) = True '输出j
End If
Next
End If
Next
'VB中,True在电脑里代表-1,False代表0(大部分语言True代表1)
'有多少数字重复就是有多少数字被输出
'所以只要把输出过的求和,他的绝对值就是有多少数字重复
Print Abs(NumPrint(1) + NumPrint(2) + NumPrint(3) + NumPrint(4) + NumPrint(5))
End Sub
2023年02月03日 01点02分 4
这里只有五个,所以最后的统计直接用加法写就完事了,数量多最好还是用For循环写。
2023年02月03日 01点02分
level 1
除了历遍法,也能用集合处理,处理数量更多的随机数更好用
2023年02月03日 01点02分 5
[呵呵]
2023年02月03日 01点02分
@miku_con 大佬,受教了[真棒]
2023年02月03日 12点02分
@miku_con 我只在测试运行的时候发现最后结果前面的空格总是长一点,所以就以为print都会在后面加一个空格,因为print的字没法复制下来,所以也弄不明白
2023年02月03日 13点02分
1