计算双色球的中奖概率

 1 /**
 2  * ClassName: LotteryQuestion 
 3  * @Description: TODO
 4  *  @category 听到有人忽悠说双色球二等奖比三等奖好中,还说打电话去福彩中心,人说"Yes!"
 5 * 很愤慨 这国家到处都是忽悠只缘于你们高中数学真的不及格
 6 *
 7 * 例如 我们国家福彩中心规则玩法 : 33个红球里选6,16个蓝球里选1
 8 * 忽悠: " 2等奖几率大于3等奖 "
 9 *
10 * 事实上这里有一个陷阱
11 *
12 * 二等奖的算法 应该是涵盖15个未摇中的篮球 因为不这样做就可能涵盖一等奖了
13 * [c15(1)*(1/[start2generateBalls])]
14 * 三等奖的算法应该是 6球选5球 再剩下的27球里选一个球 这样就不会涵盖二等奖
15 * c6(5)*c27(1)*(1/[start2generateBalls])
16  * @author Owen
17  * @date 2015年12月22日
18  */
19 public class LotteryQuestion {
20 private static int start2generateBalls() {
21 return C(33, 6) * C(16, 1);// 双色球33选6 16选1
22 }
23 static int C(int k, int n) {
24 int rs = 1;
25 for (int i = 1; i <= n; i++)
26 rs = rs * (k - i + 1) / i;
27 return rs;
28 }
29 static int Bingo(int type) {
30 int fenmu;
31 switch (type) {
32 case 1:
33 fenmu = 1; // 6+1 1/c33(6)*c16(1)
34 break;
35 case 2:
36 fenmu = 15; // 6+0 c15(1)/c33(6)*c16(1)
37 break;
38 case 3:
39 fenmu = 6 * 27; // 5+1 c6(5)*c27(1)/c33(6)*c16(1)
40 break;
41 case 4:
42 fenmu = C(6, 5) * C(27, 1) * C(15, 1) + C(6, 4) * C(27, 2); // 5+0 &
43 // 4+1
44 // (c6(5)*c27(1)*c15(1)+c6(4)*c27(2))/c33(6)*c16(1)
45 break;
46 case 5:
47 fenmu = C(6, 4) * C(27, 2) * C(15, 1) + C(6, 3) * C(27, 3); // 4+0 &
48 // 3+1
49 // (c6(4)*c27(2)*c15(1)+c6(3)*c27(3))/c33(6)*c16(1)
50 break;
51 case 6:
52 fenmu = C(6, 2) * C(27, 4) + C(6, 1) * C(27, 5) + C(27, 6);
53 break;
54 default:
55 fenmu = 0;
56 break;
57 }
58 return start2generateBalls() / fenmu;
59 }
60 public static void main(String[] args) {
61 System.out.println("[双色球一等奖中奖几率] -> [1/" + Bingo(1) + "]\n亲,500w!");
62 System.out.println("[双色球二奖中奖几率] -> [2/" + Bingo(2) + "]\n亲,166w!");
63 System.out.println("[双色球三等奖中奖几率]-> [1/" + Bingo(3) + "]\n亲,3000元");
64 System.out.println("[双色球四等奖中奖几率]-> [1/" + Bingo(4) + "]\n亲,没中过");
65 System.out.println("[双色球五等奖中奖几率]-> [1/" + Bingo(5) + "]\n亲,求安慰");
66 System.out.println("[双色球末等奖中奖几率]-> [1/" + Bingo(6) + "]\n亲,月月都来一次!");
67 }
68 }

 

posted @ 2015-12-22 11:49  欧文_Owen  阅读(1027)  评论(0编辑  收藏  举报