据说是百度面试题(1)

概率题:一个篮子里装着20个红球和20个蓝球,每次从中取出2球,如果取出的2球颜色不一样,那么放回红球,取出蓝球;如果取出的2球的颜色是一样的,则都不放回,将2球都取出;不断重复以上步骤。问题:求最后一次取球恰好只取到一个红球的概率。

因为红球是偶数,而取出1红1蓝的情况下也会把红球放回,所以红球是不会被单个取出的,所以最后一次取球是不会只取到一个红球的!也就是概率是0,但是不知道这种东西是否也要用程序写出来,如果用数学式是怎么计算的?

根本不知道该如何写

下面写了个PHP的程序亲测,

	$x=20; //红球
	$y=20; //篮球
	
	$ball = array(); //初始化 将球放入数组中
	for ($i=1;$i<=$x+$y;$i++) {
		$ball[$i] = $i;
	}	

	// 对球的操作
	function getBall($a,$b) {
		global $ball;
		global $x;
		global $y;
		if ($a <= 20 && $b <=20) { //2红球
			$x = $x-2;
			unset($ball[$a]); //注销掉数组中的此元素
			unset($ball[$b]);
		} else if ($a<=20 && $b > 20) { //1红1蓝
			$y = $y-1;
			unset($ball[$b]);
		} else if ($a > 20 && $b > 20) { // 2蓝
			$y = $y-2;
			unset($ball[$a]);
			unset($ball[$b]);
		}
	}

	// 递归取球
	function oprateBall() {
		global $ball;
		global $x;
		global $y;
		$a = array_rand($ball,2); // 随机获取目前数组中的2个球 
		
		getBall($a[0],$a[1]); //调用取球函数
		
		if (count($ball) == 2 ) {
			return oprateBall();
		} else {
			if ($x ==1) { // 红球的概率为0 不可能只最后只剩下一个红球
				return '红球';
			} else if ($y == 2) {
				return '篮球';	
			} else { // 亲测此程序运行 出现 这种情况的概率是最高的
				return '2个红球!';
			}
		}
	}

	$result = oprateBall();
	echo $result;
原文地址:https://www.cnblogs.com/darktime/p/3272286.html