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