[已解决]如何实现随机选择一个数并且每个数的几率递减
本帖最后由 zch11230 于 2012-8-19 23:29 编辑标题意思表达不够完整,可能不太好理解,就是假如有1到50 共50个数字,现在随机从其中选择一个,选中1的几率为50% 2为49% 3为48% 。。。。。50为1%
不错 又学到点新的方法 感谢各位 数字总数递减?
标题
回复 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 50,49,49,48,48,48,47,47,47,47,.... 生成一个数字序列数组,再随机取就行了吧 本帖最后由 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]