找回密码
 加入
搜索
查看: 1778|回复: 4

[效率算法] [已解决]如何实现随机选择一个数并且每个数的几率递减

[复制链接]
发表于 2012-8-19 19:24:37 | 显示全部楼层 |阅读模式
本帖最后由 zch11230 于 2012-8-19 23:29 编辑

标题意思表达不够完整,可能不太好理解,就是假如有1到50 共50个数字,现在随机从其中选择一个,选中1的几率为50% 2为49% 3为48% 。。。。。50为1%

不错 又学到点新的方法 感谢各位
发表于 2012-8-19 19:30:28 | 显示全部楼层
数字总数递减?
 楼主| 发表于 2012-8-19 20:13:02 | 显示全部楼层

标题

回复 2# netegg
不好意思 手机发帖 打字不太方便  介绍得少了点。
选中数字1的几率为50% 如果不中再选2 几率为49% 如果还是不中再选3,几率为48% 一旦选中就返回该数字并结束筛选  如果到最后都不中就返回0吧
或者不一定几率要百分比  由1/2 递减到1/51 都可以 就是要让越大的数字选中的几率越小,而不是像random(1,50,1) ,理论上每个数字被选中的几率都一样。
我在详细描述了问题之后好像有点思路了
for $i = 1 to 50
if random(0,$i,1)=1 then
return $i
exitloop
endif
next
发表于 2012-8-19 20:21:10 | 显示全部楼层
50,49,49,48,48,48,47,47,47,47,.... 生成一个数字序列数组,再随机取就行了吧
发表于 2012-8-19 21:06:12 | 显示全部楼层
本帖最后由 Duvet 于 2012-8-19 21:28 编辑


For $i = 1 To 50
        ConsoleWrite($i & @TAB & _Test($i) & @TAB & @extended & "%" & @CRLF)
        Sleep(25)
Next

Func _Test($int)
        If Not IsInt($int) Or $int < 1 Or $int > 50 Then Return SetError(-1, 0, 0)
        SRandom(@MSEC)
        If Random(1, 100, 1) <= (51-$int) Then Return SetError(0, 51-$int, $int)
        Return SetError(-2, 51-$int, 0)
EndFunc
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-5-21 03:29 , Processed in 0.078390 second(s), 24 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表