来答问题者给分~~~少了再补给你~~~!解决者再补分给!!!

hnzhc 2004-11-30 03:56:29
怎么产生一个数字不重复的4位随机数?
例如:1123 和 2233 都不行 1123 中11重复 2233中2和3都重复
...全文
176 点赞 收藏 23
写回复
23 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
True1024 2004-12-01
楼上的说法 和 vbman2003(家人) 类似。
回复
muyu1234 2004-12-01
别人解决了,我就不说了,呵呵
回复
霖湘凝 2004-11-30
可不可以四次随机从0~9中分别区出一个数,
把重复的丢弃重新获取,
然后把四个数按字符形式合并,
这样可能慢点,但能解决问题的。
回复
doudou8090 2004-11-30
是啊,chewinggum(口香糖·dotnet转型中)的方法是可以的
回复
vbman2003 2004-11-30
上面没考虑0,改一下:

Dim Col As Collection
Dim i, j, Index As Long
Dim s As String
100
  Set col = New Collection
For i = 0 To 9
Col.Add i
Next i
Randomize
For i = 1 To 4
Index = (Rnd * (Col.Count - 1)) + 1
s = s & CSng(Col(Index))
Col.Remove Index
Next i
Set Col = Nothing
j = CLng(s)
If j < 1000 Then GoTo 100
Debug.Print s
回复
vbman2003 2004-11-30
Dim col As Collection
Dim i As Integer
Dim Index As Integer
Dim s As String
Set col = New Collection
For i = 1 To 9
col.Add i
Next i
Randomize
For i = 1 To 4
Index = (col.Count - 1) * Rnd + 1
s = s & CSng(col(Index))
col.Remove Index
Next i
Set col = Nothing
回复
happy_sea 2004-11-30
我这段代码虽然罗嗦,但是非常有效哟!

Private Sub Command1_Click()
Dim x As Integer '欲生成的四位随机数
Dim i As Integer
Dim n(1 To 4) As Integer
l1:
n(1) = Int(Rnd * 10)
If n(1) = 0 Then GoTo l1 '第一位数字不能为0
l2:
n(2) = Int(Rnd * 10)
If n(2) = n(1) Then GoTo l2:
l3:
n(3) = Int(Rnd * 10)
If n(3) = n(1) Or n(3) = n(2) Then GoTo l3
l4:
n(4) = Int(Rnd * 10)
If n(4) = n(1) Or n(4) = n(2) Or n(4) = n(3) Then GoTo l4

x = n(1) * 1000 + n(2) * 100 + n(3) * 10 + n(4)

MsgBox x '显示结果

End Sub
回复
tym7712 2004-11-30
fishzone(阿愚@脸上没疤) 的方法更可行吧,应该更简单一些。
回复
feilong215 2004-11-30
chewinggum(口香糖·dotnet转型中) 的是可以的
回复
阿泰 2004-11-30
本来4位随机数字就不多,9999
再任意两个字符不重复,就更少了

那最后不还得重复啊?
回复
creazyfish 2004-11-30
chewinggum(口香糖·dotnet转型中)的方法是可以的。
回复
tztz520 2004-11-30
只能一个个拼起来
回复
fishzone 2004-11-30
给你一个思路。
1、先用随机数产生第一个数字。
2、用随机数产生第二个数字,判断是否与第一个相同,如果是,重做,如果不是,到第三步。
3、与第二步相同,但是判断两次。
4、类推
回复
roger_xiong 2004-11-30
呵呵,chewinggum(口香糖·dotnet转型中) 都已经写出代码了,楼主的问题应该解决了哦。
回复
脆皮大雪糕 2004-11-30
前面给你的那个例子生成的是字符串型的,你可以用val()函数转换成为数值型的。另外,有一种可能是第一位数为"0"这种情况经过val以后就只有3位,由于不知道你需要的到底是数值型的海是字符串型的所以我没有做处理,楼主可以自己处理。
回复
hnzhc 2004-11-30
生成1个4位数 但是里面不能有重复的数字
回复
Hattiss 2004-11-30
一个一个的产生,然后再接起来
回复
脆皮大雪糕 2004-11-30
Private Sub Command1_Click()
Dim i As Integer
Dim strTmp As String
Dim strRet As String
For i = 1 To 4
Do
strTmp = Int(Rnd() * 10)
Loop While InStr(1, strRet, strTmp) > 0
strRet = strRet + strTmp
Next
MsgBox strRet
End Sub
回复
晨星 2004-11-30
把0 ~ 9 这10个数字放在数组M中;
N 从 1 到 4 循环:
产生一个[N + 1, 10]之间的随机数R;
把M中第N个数和第R个数交换。
NEXT N

这时候取出前面4个数就可以了。
回复
zycxs 2004-11-30
用递归的方法应可以迟点附代码

回复
发帖
VB基础类
创建于2007-09-28

7476

社区成员

VB 基础类
申请成为版主
帖子事件
创建了帖子
2004-11-30 03:56
社区公告
暂无公告