## ~~~~~~~~~~~~~概率问题~~~~~~~~~~~~~~ ##

nik_Amis 2003-12-05 01:57:59
用RND生成一个四位的字符串

1。rnd*9+rnd*9+rnd*9+rnd*9
2。rnd*99+rnd*99
3。rnd*9999

那个可能重复的概率最大,不足位的补0(也就是说,rnd*999,生成了一个663就补位0663)

...全文
133 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
victorycyz 2003-12-06
  • 打赏
  • 举报
回复
第二种更正一下:
(1/198*1/198*2+1/99*1/99*98)^2=0.000101002
victorycyz 2003-12-06
  • 打赏
  • 举报
回复
计算重复的概率:
第一种:
(1/18*1/18*2+1/9*1/9*8)^4=0.000121265

第二种:
(1/198*1/198*2+1/99*1/99*98)^4=0.000101002

第三种:
1/19998*1/19998*2+1/9999*1/9999*9998=0.000100005

原因上面已经说了:
第一种方案,取得0和9的概率只有其他数字的一半。
第二种方案,取得0和99的概率只有其他数的一半。
第三种,取得0 和9999的概率只有其他数字的一半。
szyhy810518 2003-12-05
  • 打赏
  • 举报
回复
那我只有说概率一样咯!
nik_Amis 2003-12-05
  • 打赏
  • 举报
回复
szyhy810518

清看仔细了,我说的是字符串比较
另外,不要吹毛求疵+,&有什么不一样?我问的是算法,不是怎么写程序


szyhy810518 2003-12-05
  • 打赏
  • 举报
回复
1。rnd*9+rnd*9+rnd*9+rnd*9
0<=rnd*9<=9
0<=rnd*9+rnd*9+rnd*9+rnd*9<=36
出现重复的概率1/36
2。rnd*99+rnd*99
0<=rnd*99<=99
0<=rnd*99+rnd*99<=198
出现重复的概率1/198
3。rnd*9999
0<=rnd*9999<=9999
出现重复的概率1/9999


rnd*999,生成了一个663就补位0663,?????????????补0有用吗,反正都是整数相加"+"
nik_Amis 2003-12-05
  • 打赏
  • 举报
回复
大家看清楚了,不要求做法~~~~~
单纯的生成这几个数,或者比较谁重复的多有什么意思

要的是数学公式,论证过程,呵呵



victorycyz 2003-12-05
  • 打赏
  • 举报
回复
正确的做法应该是:
1. Round(Rnd() * 10 - 0.5, 0) & round(rnd()*10-.5,0) & ...
2. round(rnd() * 100-.5,0) & round(rnd()*100-.5,0)
3. round(rnd()*10000-.5,0)
victorycyz 2003-12-05
  • 打赏
  • 举报
回复
所以,第一种重复概率最大,第二种次之,第三种最小。
victorycyz 2003-12-05
  • 打赏
  • 举报
回复
我明白了,按楼主这样的数,再取整,第一种方案,取得0和9的概率只有其他数字的一半。
同理,第二种方案,取得0和99的概率只有其他数的一半。
第三种,取得0 和9999的概率只有其他数字的一半。

所以,第三种重复概率最大,第二种次之,第三种最小。
northwolves 2003-12-05
  • 打赏
  • 举报
回复
第一个:

Sub a()
Dim a As New Collection
Dim pa As Long
On Error GoTo err:
Randomize
For pa = 1 To 10000
temp = CInt(Rnd * 9) & CInt(Rnd * 9) & CInt(Rnd * 9) & CInt(Rnd * 9)
a.Add temp, "a" & temp
Next
err:
List1.AddItem pa
End Sub


Sub b()
Dim a As New Collection
Dim pa As Long
On Error GoTo err:
Randomize
For pa = 1 To 10000
temp = Format(CInt(Rnd * 99), "00") & Format(CInt(Rnd * 99), "00")
a.Add temp, "a" & temp
Next
err:
List2.AddItem pa
End Sub
Sub c()
Dim a As New Collection
Dim pa As Long
On Error GoTo err:
Randomize
For pa = 1 To 10000
temp = Format(CInt(Rnd * 9999), "0000")
a.Add temp, "a" & temp
Next
err:
List3.AddItem pa
End Sub

Private Sub Command1_Click()
List1.Clear
List2.Clear
List3.Clear
For i = 1 To 100
a
b
c
Next
MsgBox avg(List1) & vbCrLf & avg(List2) & vbCrLf & avg(List3)
End Sub

Function avg(ByVal lst As ListBox) As Long
avg = 0
For i = 0 To lst.ListCount - 1
avg = avg + Val(lst.List(i))
Next
avg = CLng(avg) / lst.ListCount
End Function
szyhy810518 2003-12-05
  • 打赏
  • 举报
回复
修改如下:

方法 重复次数(算两两重复)
1。CInt(Rnd * 9) & CInt(Rnd * 9) & CInt(Rnd * 9) & CInt(Rnd * 9) 11262
2。Format(CInt(Rnd * 99), "00") & Format(CInt(Rnd * 99), "00") 10034
3。rnd*9999 10029

结论:
概率一样
szyhy810518 2003-12-05
  • 打赏
  • 举报
回复
错了,怎么能用"+"
rnd*9+rnd*9+rnd*9+rnd*9
是不是起码要改为
rnd*9 & rnd*9 & rnd*9 & rnd*9
3661512 2003-12-05
  • 打赏
  • 举报
回复
仔细想了想,觉得是第一个。
第一个重复的概率大概是1/9*1/9*1/9=1/729
第二个是1/99*1/99=1/9801
第三个是1/9999
szyhy810518 2003-12-05
  • 打赏
  • 举报
回复
方法 重复次数(算两两重复)
1。rnd*9+rnd*9+rnd*9+rnd*9 2661300
2。rnd*99+rnd*99 340722
3。rnd*9999 10029
victorycyz 2003-12-05
  • 打赏
  • 举报
回复
1. (1/10)*(1/10)*(1/10)*(1/10)
2. (1/100)*(1/100)
3. (1/10000)

不是吗?
nik_Amis 2003-12-05
  • 打赏
  • 举报
回复
胡说

论证一下
3661512 2003-12-05
  • 打赏
  • 举报
回复
第三个
victorycyz 2003-12-05
  • 打赏
  • 举报
回复
一样。

7,763

社区成员

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

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