程序与逻辑

先看一个小程序

OptionExplicit

Dim a(1To 10) As Integer

Dim i AsInteger, j As Integer, temp As Integer

Dim flag

'随机产生10个1到100之间的数

PrivateSub Command1_Click()

'产生并显示第一个数

a(1) =Int(Rnd * 100)

Printa(1)

'标志为0时,说明不重复

flag = 0

'产生第2到第9个数

For i = 2To 10

temp = Int(Rnd * 100)

'判断新产生的数是否与前i-1个数重复

For j = 1 To i - 1

If a(j) = temp Then

'标志为1说明重复,退出循环

flag = 1

Exit For

Else

a(i) = temp

End If

Next j

Print a(i)

Next i

End Sub

产生多个不重复的随机数,首先需要有产生数的大致思路,然后进行判断得出不重复的多个数。这个程序关键之处是“不重复”,判断所产生的数是否重复是很严密的逻辑问题,任何一个语句写错位置都不能得出正确的结果。先写出大致过程,然后慢慢调试,比如你会遇到这样的问题,exit for位置不对,如果写在next j 后面将会使判断过程不起作用;如果print ai)写在第二层循环里面,那么将会打印多个该数。

把这个程序稍微变换一下

如题:

产生kmn之间不重复的随机数

OptionExplicit

Dim a()As Integer

Dim i AsInteger, j As Integer

Dim m AsInteger, n As Integer, k As Integer, temp As Integer

Dim flag

PrivateSub Command1_Click()

k = InputBox("请输入k的值")

m = InputBox("请输入m的值")

n = InputBox("请输入n的值")


ReDim a(k) As Integer

a(1) = m + Int((n - m) * Rnd)

Print a(1)

flag = 0

For i = 2 To k

temp = m + Int((n - m) * Rnd)

For j = 1 To i - 1

If a(j) = temp Then

flag = 1

Exit For

Else

a(i) = temp

End If

Next j

Print a(i)

Next i

End Sub

其实只是形式变了一下,核心还是不变的,只是最初我也没有反应过来,原来计算机如此智能。需要注意的一点是这里涉及到可变数组的知识,我把ReDim a(k) As Integer写在了第一句,也就是产生k之前,结果下标越界。。。还是好好复习一下吧。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值