抽奖奖品概率的算法?扑克概率计算?
抽奖奖品概率的算法?
可以预定义一个数,然后根据百分比计算各自的门槛值。如下: (注意:概率需要从小到大排列,因为用if判断的问题。
) #define BASE_NUMBER 32767 #define BASE_DIV 100 #define RATE1 1 #define RATE2 5 #define RATE3 20 #define RATE4 74 int var1, var2, var3, var4; main() { var1 = (int)((float)BASE_NUMBER*RATE1/BASE_DIV)
; var2 = (int)((float)BASE_NUMBER*RATE2/BASE_DIV)
; var3 = (int)((float)BASE_NUMBER*RATE3/BASE_DIV)
; var4 = (int)((float)BASE_NUMBER*RATE4/BASE_DIV); ....
. if ( rand <= var1 ) { // 第一种 } else if ( rand <= var2 ) { // 第二种 } else if ( rand <= var3 ) { // 第三种 } else { // 第四种 } ... } 如上,只需要改变BASE_DIV 和RATE1 2 3 4就能控制
扑克概率计算?
回答:(这个问题属于“不放回抽样”。)
第1次抽到A的概率显然是2/9。
第2次抽到A的概率是
(2/9)x(1/8) + (7/9)x(2/8) = 2/9。
〔其实,如果连续抽9次(“不放回抽样”),每次抽到A的概率都是2/9。这和抓阄一样,抓的次序不影响抓到的概率。〕
两次共抽到k(k=0、1、2)张的概率是
C(2, k) x (2/9)^k (1-2/9)^(2-k).
__________________________________
另外,第1次抽和第2次抽不是“互斥事件”,故不能简单相加。要用“容斥原理”减掉重叠部分,即
(2/9)+(2/9)-(2/9)x(2/9) = 32/81.
这个32/81的意义是两次抽取中“抽到A”(可以是1次,也可以是2次)的概率。