随机遍取0~99整数问题,求算法。

myxiaopeier 2003-01-28 08:50:03
偶只知道如下方法:(俺随便写的,思维混乱,怡笑大方)

数组arr(0 to 99) as integer 保存结果。
i循环计数
j数组元素位置
b是否存在相同数字
j=0
do until j<=99
随机取0 to 99 内整数(num)一个。
b=false
for i=0 to j
if num=arr(i) then
b=true
end if
next
if not b then
j=j+1
arr(j)=num
end if
loop

谁有更好的算法啊。拜托拜托。
...全文
165 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
myxiaopeier 2003-01-28
  • 打赏
  • 举报
回复
感谢zhangxu421(Sniper)提供的方法,比我的强多了。

谁还有更优秀的算法,如果没有就结了。
myxiaopeier 2003-01-28
  • 打赏
  • 举报
回复
rnd 当然可以,不过,我取这100个数字,必须全部取遍,而且不能重复啊。
nik_Amis 2003-01-28
  • 打赏
  • 举报
回复
y,就上楼上上的办法
litsnake1 2003-01-28
  • 打赏
  • 举报
回复
用rnd不行吗?
zhangxu421 2003-01-28
  • 打赏
  • 举报
回复
zyl910所说的方法:
Private Sub Command2_Click()
Dim c(1 To 99) As Integer
Dim d As Integer, e As Integer, temp As Integer
Dim i As Integer
Dim MaxCount As Integer
Randomize Timer

For i = 1 To 99'赋初值
c(i) = i
Next i
MaxCount = 10000'交换次数
For i = 1 To MaxCount
d = Int(Rnd * 99 + 1)'需要交换的两个位置: d,e
e = Int(Rnd * 99 + 1)
If d <> e Then'交换
temp = c(d)
c(d) = c(e)
c(e) = temp
End If
Next i
For i = 1 To 99
Print c(i);
Next i

End Sub
sanzfm 2003-01-28
  • 打赏
  • 举报
回复

Function CreatePwd
Dim strNum
Randomize
'产生随机数字
strNum=Int((99-1+1)*Rnd+1)
strNum=Right("000000"&strNum , 5)
CreatePwd=strNum
End Function


zhangxu421 2003-01-28
  • 打赏
  • 举报
回复
Private Sub Command1_Click()
Dim a(1 To 99) As Integer
Dim b(1 To 99) As Integer
'a()中保存中结果
'b()中保存相应的标志: b()中各元素的初始值为0.如果整数x已经被赋予了a(),那么b(x)置1
Dim i As Integer, j As Integer
Randomize Timer

i = 1
Do While i <= 99
a(i) = Int(Rnd * 99 + 1)
If b(a(i)) = 0 Then '如果这个整数还没被用到
b(a(i)) = 1
Print a(i);
i = i + 1'进行a()中的下一个元素
End If
Loop

End Sub
zhangxu421 2003-01-28
  • 打赏
  • 举报
回复
Private Sub Command1_Click()
Dim a(1 To 99) As Integer
Dim b(1 To 99) As Integer
Dim i As Integer, j As Integer
Randomize Timer

i = 1
Do While i <= 99
a(i) = Int(Rnd * 99 + 1)
If b(a(i)) = 0 Then
b(a(i)) = 1
Print a(i);
i = i + 1
End If
Loop


End Sub
_131_ 2003-01-28
  • 打赏
  • 举报
回复
'标识一个种子,否则每次随机取出的数字都是一样的
dim s as integer
Randomize
s = Rnd()*100

另外,如果要实现你上述的功能,我建议使用listbox,这样能够很好的控制数组,不需要过多的考虑数字取出后原有数组的维护!
qiqif 2003-01-28
  • 打赏
  • 举报
回复
用随机函数rnd
zqfleaf 2003-01-28
  • 打赏
  • 举报
回复
dim ii as integer
ii = rnd() * 100
zyl910 2003-01-28
  • 打赏
  • 举报
回复
建立一个数组
顺序填上数字
再把数组打乱


以前有人问过
URL不记得了
你搜索一下贴子
dengyin2000 2003-01-28
  • 打赏
  • 举报
回复
dim s as integer
dim a as integer
s=int((rnd*100))
myxiaopeier 2003-01-28
  • 打赏
  • 举报
回复
高,实在是高。
smartyyp 2003-01-28
  • 打赏
  • 举报
回复
up
northwolves 2003-01-28
  • 打赏
  • 举报
回复
Private Sub Command1_Click()
Dim x As New Collection, a(0 To 99) As String
For i = 0 To 99
x.Add i
Next
For i = 0 To 99
Randomize
num = Int(Rnd * x.Count + 1)
a(i) = Str(x.Item(num))
x.Remove num
Next
MsgBox Join(a(), ","), 64, "random number between 0 and 99"
End Sub

7,762

社区成员

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

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