从a、b、c中随机挑出一个,a出现的几率为20%,b出现的记录为50%,c出现的几率为70%。
求最简洁效率最高的算法,最好用php。
求最简洁效率最高的算法,最好用php。
|
dndxAug 3, 2013 via iPad
1
70 + 50 + 20 > 100
这如何实现? |
|
iloahzAug 3, 2013
2
r = rand() % 100;
if r < 20: return a else if r < 70: return b else: return c |
|
wang2191195Aug 3, 2013 via iPhone
3
这个要求太高了=_=
|
|
rwxAug 3, 2013
6
自己都说是权重了,那就按权重来办啊
总权重=20+50+70 取一个 1 到总权重的随机数 看随机数落到哪个权重范围就选哪个 |
|
windywinterAug 3, 2013
11
把2L的% 100改成%140就对了。
|
|
jjplayAug 3, 2013
15
我觉得你是体彩中心新招聘的程序员!!!!!!!!!
|
|
MutooAug 3, 2013
16
你需要《代码大全》第12章,表驱动法。
不需要有百分数表示,用整数就好。 1) 先求合sum 2) 产生0~sum之间的随机数 3) sum依次减去各个权重,直到sum为负数,被减的那个就是被抽中的 这个算法要求每次减的顺序是一致的,这样才可以保证概率。 其实就是把古典概型(权数)转化成几何概型(一维长度) |
|
zurocAug 3, 2013
18
|
|
justfinduAug 5, 2013
19
http://www.helloweba.com/view-blog-216.html
类似于这种? 表示不会贴代码~ 只是这个示例里面有一个转盘范围 min和max , v表示权重或者叫做概率~ 然后就可以抽奖了~ |