游戏规则
红黄蓝三种颜色的棍子各九根,放入一个纸箱取出九根,按各颜色棍子的数量获奖,
结果 分别为 900(即9根小棍颜色相同),018,027,036,045,117,126,135,144,225,234,333。
数学公式
P = C(9,N)xC(9,N)xC(9,N)x A(3, M) / C(27, 9)
此问题中从27个小球中取出9个小球,共三种情况
第一种, 三个数字相同,即3,3,3,相互对应N值,此情况M值为0
第二种, 三个数字都不相同, 例如 2,3 ,4,相互对应N值,此情况M值为3
第三种, 三个数字中任意两个相同, 例如,1,4,4,相互对应N值,此情况M值为1
C(n,k)计算方法
// 函数计算组合数 C(n, k)
function comb($n, $k) {
// 计算组合数 C(n, k)
$result = 1;
for ($i = 0; $i < $k; $i++) {
$result *= ($n - $i) / ($i + 1);
}
return intval($result);
}
A(n,k)计算方法
// 函数计算组合数 A(n, k)
function A($a,$b){
// 函数计算排列数 A(n, k)
function perm($n, $k) {
// 计算 n 的阶乘
$nFactorial = factorial($n);
// 计算 (n - k) 的阶乘
$kFactorial = factorial($n - $k);
// 返回排列数 A(n, k)
return intval($nFactorial / $kFactorial);
}
// 辅助函数计算阶乘
function factorial($n) {
$result = 1;
for ($i = 2; $i <= $n; $i++) {
$result *= $i;
}
return $result;
}
// 计算 A(3, 0)
return perm($a, $b);
}
全部代码
function XFGun($numValue){
$str = (string)$numValue;
$arr = str_split($str);
if (!is_numeric($numValue)) {
echo "只能输入数字,请重新输入";
return '';
}
if (sizeof($arr) != 3){
echo "只能输入三个数字,请重新输入";
return '';
}
if (array_sum($arr) != 9) {
echo "三个数字和不等于9,请重新输入";
return '';
}
// 总的小球数量和每种颜色的小球数量
$totalBalls = 27;
$redBalls = 9;
$yellowBalls = 9;
$blueBalls = 9;
// 要抽取的小球数量
$ballsToDraw = 9;
// 特定的颜色组合(红2、黄3、蓝4)
$red = $arr[0];
$yellow = $arr[1];
$blue = $arr[2];
if ($red == $yellow && $red == $blue){
$a = A(3,0);
$AStr = "A(3,0)";
}
elseif ($red != $yellow && $red != $blue && $yellow != $blue){
$a = A(3,3);
$AStr = "A(3,3)";
}
else{
$a = A(3,1);
$AStr = "A(3,1)";
}
// 计算 C(9, 3)
$combRed = comb($redBalls, $red);
$combYellow = comb($yellowBalls, $yellow);
$combBlue = comb($blueBalls, $blue);
// 计算 C(27, 9)
$combCount = comb($totalBalls, 9);
// 计算 C(9, 2) × C(9, 3) × C(9, 4) x A(n, k)
$comb9 = $combRed * $combYellow * $combBlue * $a;
$result = sprintf("%.6f", $comb9 / $combCount * 100);
echo "公式:C($redBalls, $red) * C($yellowBalls, $yellow) * C($blueBalls, $blue) * $AStr / C(27,9) \n";
echo "值:$combRed * $combYellow * $combBlue * $a / $combCount \n";
echo "该结果概率:$comb9 \n";
echo "总概率:$combCount \n";
// 输出结果
echo "{$numValue}的概率为: " . $result . "%\n";
}
// 函数计算组合数 A(n, k)
function A($a,$b){
// 函数计算排列数 A(n, k)
function perm($n, $k) {
// 计算 n 的阶乘
$nFactorial = factorial($n);
// 计算 (n - k) 的阶乘
$kFactorial = factorial($n - $k);
// 返回排列数 A(n, k)
return intval($nFactorial / $kFactorial);
}
// 辅助函数计算阶乘
function factorial($n) {
$result = 1;
for ($i = 2; $i <= $n; $i++) {
$result *= $i;
}
return $result;
}
// 计算 A(3, 0)
return perm($a, $b);
}
// 函数计算组合数 C(n, k)
function comb($n, $k) {
// 计算组合数 C(n, k)
$result = 1;
for ($i = 0; $i < $k; $i++) {
$result *= ($n - $i) / ($i + 1);
}
return intval($result);
}
//调用函数
XFGun(235);