超难的随机数算法问题,产生一系列按比例分布的随机数>>>高分!

deadrock 2003-03-23 02:24:46

要求算法生成不均匀分布的随机数列,但总的比例是固定的。
比如:要产生100个1,2,3的数
其中1占50%
2占20%
3占30%

...全文
104 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
laisiwei 2003-03-23
  • 打赏
  • 举报
回复
放一个按钮,一个文本框。
代码如下:


Private Number(100) As Boolean
Private cNumber As Long

Private Sub Command1_Click()
Dim a As Long
Dim i As Long
i = 0
Randomize

Do While (i = 0)
Re:
a = Int(Rnd * 100) + 1

If Number(a) = False Then
Number(a) = True

If a >= 1 And a <= 50 Then
Text1.Text = Text1.Text + "1"
ElseIf a >= 51 And a <= 80 Then
Text1.Text = Text1.Text + "2"
Else
Text1.Text = Text1.Text + "3"
End If

cNumber = cNumber + 1
Else

If cNumber = 100 Then Exit Do
GoTo Re

End If
Loop

End Sub
qqqdong 2003-03-23
  • 打赏
  • 举报
回复
将50个1,30个2,20个3进行随即排队
laisiwei 2003-03-23
  • 打赏
  • 举报
回复
先讲1-100打乱
然后就好办了
deadrock 2003-03-23
  • 打赏
  • 举报
回复
这种方法我试过
但还在比例方面太差,不能比较精确地分布
除非我要的数非常大,才会比较接近
我要的是精确的算法
就是说100个数中
就有50个1,30个2,20个3

我的实际需求是这样的
一个抽奖机,中奖率100%
中奖等级分为一,二,三等
他们的中奖比例为:5:3:2

想一想吧
没这么简单

用户 昵称 2003-03-23
  • 打赏
  • 举报
回复
随机100次,0-0.5记为1
0.5-0.7记为2
剩下的记为3
搞定,还有问题吗?
bugfree 2003-03-23
  • 打赏
  • 举报
回复
方法:
//首先产生10以内的随机数, 再加上确定的底数即可
e.g. 如果要产生50-60的数 生成的随机数+50

问题:
1. "产出一定比例的", 求得个数, 用while循环产生
2. "不均匀分布的随机数列" 那就用
template<class RandomAccessIterator> inline
void random_shuffle(RandomAccessIterator first,
RandomAccessIterator last)

洗洗牌吧
deadrock 2003-03-23
  • 打赏
  • 举报
回复
对不起,你们这种方法都不行
我已经解决
实际上这个算法与随机数无关
是一个近似算法

7,763

社区成员

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

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