zch11230 发表于 2012-8-19 19:24:37

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

本帖最后由 zch11230 于 2012-8-19 23:29 编辑

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

不错 又学到点新的方法 感谢各位

netegg 发表于 2012-8-19 19:30:28

数字总数递减?

zch11230 发表于 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

afan 发表于 2012-8-19 20:21:10

50,49,49,48,48,48,47,47,47,47,.... 生成一个数字序列数组,再随机取就行了吧

Duvet 发表于 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
页: [1]
查看完整版本: [已解决]如何实现随机选择一个数并且每个数的几率递减