標籤:
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 Owen17 * @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選122 }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+144 // (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+149 // (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 }
計算雙色球的中獎機率