最近面试遇到一个比较有意思的面试题,有些思考,记录下来和大家分享。
问题
一万人参加抛硬币游戏,当一个人抛到一次正面即退出游戏,所有人都退出游戏后游戏结束,问游戏结束后正面出现的次数和反面出现的次数哪个多,推理的过程。
答案
这里只说合理的答案和解释,是不是最终答案或者正确答案需要大家自己判定。
我的回答
我认为反面出现的次数多,我是这样推理的:每次抛硬币出现正面或反面的概率都是 50%(不要杠硬币站立),那么一个人抛一万次,从概率上讲就是五千次正面和五千次反面,极端情况,前五千次都是反面,第五千零一次是正面,这时候游戏结束,那么反面的次数肯定多于正面;第二,正反面各 50% 的概率是在基数足够大时才能保证的,抛硬币次数小的时候,总会是向一边倾斜的,那么对于每一个人来说,因为抛到正面就结束,那么实验基数不会特别大,就最终结果来看,每个参赛者,只会抛到一次正面(这个时候结束了),但是可能抛到多次反面,那么总体来说反面的次数会多于正面。
面试官期待的答案
相等。从概率来说就是 50%,那么一万个人算是比较大的基数,基本能保证实际概率等于理想概率,那么第一轮游戏过后,就是五千正面后五千反面,依此类推游戏一轮一轮的往后进行,最终结果是一样多。
思考
这里有个小的脑筋转弯,游戏结束后,一共出现多少次正面?美女面试官让我 5 秒中回答,给我整懵了,你能 5 秒内答出来吗?—————————————————————————————————————————————————————————————————————————————————————————— 一万次,哈哈哈哈!
我觉得我的回答有道理的,同时也觉得面试官的答案也是有道理的(狗头)。So,该怎么办呢!? 这个时候就显示计算机相对于其他学科的好处了,那就是做平常实验的易操作性,做个计算机实验,写写代码跑一跑就可以了,你做物理、化学实验就没这么易操了。
package com.testcase;
import java.util.*;
public class Test {
private static Random random = new Random();
private static int obverseMore = 0;
private static int reverseMore = 0;
private static int eq = 0;
private static final int SIZE = 10000;
private static final int TIMES = 100000;
public static void main(String[] args) {
//
for (int i = 0; i < TIMES; i++) {
int reverseCount = 0;
for (int j = 0; j < SIZE; j++) {
while (!coinTossing()) {
reverseCount +=1;
}
}
if(reverseCount == SIZE) {
eq +=1;
} else if (reverseCount < SIZE) {
obverseMore +=1;
} else {
reverseMore +=1;
}
}
System.out.printf("100 times exploration, obverse more times is: %d, reverse more times is: %d, equals times is: %d \n", obverseMore, reverseMore, eq);
}
/**
*
* @return true mean obverse or reverse
*/
private static boolean coinTossing() {
return random.nextBoolean();
}
}
首先确认下我的实验代码逻辑是没问题的,因为正面次数是固定的,所以 while 循环中,抛硬币为反面时我们把 反面计数 reverseCount + 1,最后拿 reverseCount 和 10000 比较。用三个变量记录十万次实验的结果。
实验序号 | obverseMore | reverseMore | equals |
---|---|---|---|
1 | 50086 | 49616 | 298 |
2 | 50036 | 49677 | 287 |
3 | 49893 | 49803 | 304 |
4 | 50056 | 49667 | 277 |
5 | 49921 | 49802 | 277 |
6 | 50285 | 49457 | 258 |
以上是我记录的一些实验结果
总结
从上面的实验结果来看,正反面相等的实验结果占比特别少,相比其他两个,随着实验次数基数增大,应该可以忽略了。正面和反面相比,乍一看,正面多于反面的实验结果总是要多一点,但是实验次数太少,并不能有太多的说服性。但是不管怎么说,理论上的相等,在实验中出现的概率太低了。
所以怎么样,理想的理论得出的结果还是太不靠谱了吧,哈哈哈!有兴趣的同学可以再做多点的实验,或者有其他办法证明这个问题,欢迎留言。
最后打个广告,失业找工作中,普通一本,6年Java,希望上海、苏州有推荐的,谢谢!