Do '随机产生数字 a = Right(Time * Rnd, 1) b = Right(Time * Rnd, 1) c = Right(Time * Rnd, 1) d = Right(Time * Rnd, 1) Loop While a = b Or a = c Or a = d Or b = c Or b = d Or c = d以前我做猜数字时随机产生四个不同的数字用的给分吧
现在可以用这个初始化随机种子,以前我还不懂这个 Do '随机产生数字 Randomize a = 9 * Rnd\1 b = 9 * Rnd\1 c = 9 * Rnd\1 d = 9 * Rnd\1 Loop While a = b Or a = c Or a = d Or b = c Or b = d Or c = d
Private Sub Command1_Click() Dim x(9) As Byte, i As Integer, j As Byte, result As String For i = 0 To 9 x(i) = i Next For i = 1 To 4 Randomize j = Int(Rnd * (10 - i)) result = result & x(j) x(10 - i) = x(j) x(j) = 10 - i Next MsgBox result End Sub
lzw858(落伍者)兄的方法理论上有可能运行一年都出不了结果
Dim A(0 to 9) as byte ,I as long for i=0 to 9 A(i)=i next for i=0 to 1000 randomize timer swap A(int(rnd*10)),a(int(rnd*10)) next********************private sub SWAP(A as byte,B as byte) Dim T as byte t=a:a=b:b=tend sub*******************然后你按照顺序调用A(...)即可不过程序中用RANDOMIZE TIMER稍微有点达不到理想状态,应该把TIMER改为API函数GETTICKCOUNT更好。
虽然许多人不愿意使用,一般可以用集合处理此类问题:Sub xx() Dim x As New Collection, i As Integer, j As Byte, result As String result = "" For i = 0 To 9 x.Add i Next For i = 1 To 4 Randomize j = Int(Rnd * (x.Count)) + 1 result = result & x(j) x.Remove j Next Debug.Print result End Sub
Private Sub Command1_Click()
'必要参数 Dim A() As Long '数组 Dim Aoc As Long '输出数组{1 <= Aoc <= (Vlen+1)} Dim Vmax As Long '数值绝对上界{ Vmax > Vmin } Dim Vmin As Long '数值绝对下界{ Vmin < Vmax }
'可导参数 Dim Vlen As Long '数值相对范围 Dim I As Long '索引 Dim Iom As Long '输出索引最大 Dim Isw As Long '交换指针 Dim Vst As Long '临时储值变量
Vmin = 0: Vmax = 9: Aoc = 4
Vlen = Vmax - Vmin Iom = Aoc - 1
ReDim A(0 To Vlen) '数组初始化 For I = 0 To Vlen A(I) = I + Vmin Next Randomize Timer '数组乱序(这里是“跳蚤算法”的快速型变种算法) For I = 0 To Iom Isw = Int(Rnd * 10) Vst = A(Isw): A(Isw) = A(I): A(I) = Vst 'Swap A(Isw),A(I) Next
ReDim Preserve A(0 To Iom)
Text1.Text = ""
For I = 0 To Iom Text1.Text = Text1.Text & " " & A(I) Next End Sub
dim str as string dim Result(3) as integer dim Pos as integer str="0123456789" for i=0 to 3 randomize pos = Int(Rnd * (len(str)) + 1 result(i)=mid(str,pos,1) str=replace(str,result(i),"") next 注:只满足楼主要求
a = Right(Time * Rnd, 1)
b = Right(Time * Rnd, 1)
c = Right(Time * Rnd, 1)
d = Right(Time * Rnd, 1)
Loop While a = b Or a = c Or a = d Or b = c Or b = d Or c = d以前我做猜数字时随机产生四个不同的数字用的给分吧
Do '随机产生数字
Randomize
a = 9 * Rnd\1
b = 9 * Rnd\1
c = 9 * Rnd\1
d = 9 * Rnd\1
Loop While a = b Or a = c Or a = d Or b = c Or b = d Or c = d
Dim x(9) As Byte, i As Integer, j As Byte, result As String
For i = 0 To 9
x(i) = i
Next
For i = 1 To 4
Randomize
j = Int(Rnd * (10 - i))
result = result & x(j)
x(10 - i) = x(j)
x(j) = 10 - i
Next
MsgBox result
End Sub
for i=0 to 9
A(i)=i
next
for i=0 to 1000
randomize timer
swap A(int(rnd*10)),a(int(rnd*10))
next********************private sub SWAP(A as byte,B as byte) Dim T as byte
t=a:a=b:b=tend sub*******************然后你按照顺序调用A(...)即可不过程序中用RANDOMIZE TIMER稍微有点达不到理想状态,应该把TIMER改为API函数GETTICKCOUNT更好。
Dim x As New Collection, i As Integer, j As Byte, result As String
result = ""
For i = 0 To 9
x.Add i
Next
For i = 1 To 4
Randomize
j = Int(Rnd * (x.Count)) + 1
result = result & x(j)
x.Remove j
Next
Debug.Print result
End Sub
'必要参数
Dim A() As Long '数组
Dim Aoc As Long '输出数组{1 <= Aoc <= (Vlen+1)}
Dim Vmax As Long '数值绝对上界{ Vmax > Vmin }
Dim Vmin As Long '数值绝对下界{ Vmin < Vmax }
'可导参数
Dim Vlen As Long '数值相对范围
Dim I As Long '索引
Dim Iom As Long '输出索引最大
Dim Isw As Long '交换指针
Dim Vst As Long '临时储值变量
Vmin = 0: Vmax = 9: Aoc = 4
Vlen = Vmax - Vmin
Iom = Aoc - 1
ReDim A(0 To Vlen) '数组初始化
For I = 0 To Vlen
A(I) = I + Vmin
Next Randomize Timer '数组乱序(这里是“跳蚤算法”的快速型变种算法)
For I = 0 To Iom
Isw = Int(Rnd * 10)
Vst = A(Isw): A(Isw) = A(I): A(I) = Vst 'Swap A(Isw),A(I)
Next
ReDim Preserve A(0 To Iom)
Text1.Text = ""
For I = 0 To Iom
Text1.Text = Text1.Text & " " & A(I)
Next
End Sub
dim Result(3) as integer
dim Pos as integer
str="0123456789"
for i=0 to 3
randomize
pos = Int(Rnd * (len(str)) + 1
result(i)=mid(str,pos,1)
str=replace(str,result(i),"")
next
注:只满足楼主要求