`
tempsitegoogle
  • 浏览: 868188 次
文章分类
社区版块
存档分类
最新评论

程序与逻辑

 
阅读更多

先看一个小程序

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之前,结果下标越界。。。还是好好复习一下吧。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics