注册 登录
编程论坛 VB6论坛

求数字乱序排列的编程思路

yuma 发布于 2020-11-24 21:02, 2066 次点击
求数字乱序排列的编程思路

已知条件:
dim a as string
a="1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21"

如何将这21个数字随机取出(取出来还是21个)? 不要代码,求思路。

[此贴子已经被作者于2020-11-24 21:04编辑过]

3 回复
#2
cwa99582020-11-25 08:11
把a里的数据转换为数组。然后用随机数发生器产生个数,这个数就作为数组的下标,得到这个数,然后在数组里删除这个数,再重复,直到取完。
#3
yuma2020-11-25 08:14
以下是引用cwa9958在2020-11-25 08:11:52的发言:

把a里的数据转换为数组。然后用随机数发生器产生个数,这个数就作为数组的下标,得到这个数,然后在数组里删除这个数,再重复,直到取完。



你后面的方法不好。

我的方法:
先字符串转数组,然后数组用洗牌算法随机洗牌,我已写好代码。
我用VBS写的,代码如下:

程序代码:
Sub Shuffle(ByRef a)
    Dim t, j, n
    n = UBound(a)
    Randomize
    For i = n To 1 Step - 1
        j = Int(Rnd * (i + 1))
        t = a(j)
        a(j) = a(i)
        a(i) = t
    Next
End Sub

Dim Array(20) '数组0到20,共21个数字
Dim str
str = "1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21"  '要随机的数字这样赋值
S = Split(str,",")  '以逗号作为分割

For i = 0 To UBound(S)
    Array(i) = S(i)
Next
a = Array(20)   '数组的个数。0到20,共21个

WScript.Echo Join(Array)  '洗牌前
Shuffle Array
WScript.Echo Join(Array)  '洗牌后
word = Join(Array)
T=split(word," ")  '以空格作为分隔符
For j = 0 To ubound(T)
MsgBox T(j)
Next


[此贴子已经被作者于2020-12-14 09:53编辑过]

#4
teshubancai2020-11-25 15:34
回复 3楼 yuma
给勤劳的您点个赞!准备学习一下!
1