囚犯生存概率引发的循环思考
2010-04-27 11:15
465 查看
有一个囚犯,国王打算处决他,但仁慈的国王给了他一个生还的机会。现在摆在他面前有两个瓶子,一个里面装了50个白球,一个装了50个黑球,这个囚犯有一个机会可以随便怎样重新分配这些球到两个瓶子中(当然,要保证不空),分配完了之后囚犯被蒙上眼睛,国王随机取一个瓶子给他,他在里面摸出一个球(因为蒙着眼睛,所以也是随机抽取),如果白球,则活,否则挂掉。问,这个囚犯如何分配,才能最大化生还几率。
答案当然谁都能猜到,就是只把一个白球放过去。我编了个循环试了试。遇到问题如下:
我假定一个瓶子中球总数为:zongshu,白球数为baiqiu,囚犯活下来的概率为rate。循环如下:
for( zongshu=1; zongshu<100; zongshu++){
for(baiqiu=0;(baiqiu<=zongshu)&&(baiqiu<=50); baiqiu++){
temprate=(double)baiqiu*0.5/(double)zongshu+(double)(50-baiqiu)*0.5/(double)(100-zongshu);
if(temprate>rate) {
rate=temprate;
b= baiqiu;
z= zongshu;
}
else continue;
}
continue;
}
这个循环是错误的,程序结果有问题,居然能把rate算到大于1。百思不得其解。而后我改了一下试试。定义了基于heiqiu和baiqiu的循环如下:
for(heiqiu=0;heiqiu<=50;heiqiu++){
for(baiqiu=1;baiqiu<=50;baiqiu++){
int zongshu=heiqiu+baiqiu;
temprate=(double)baiqiu*0.5/(double)zongshu+(double)(50-baiqiu)*0.5/(double)(100-zongshu);
if(temprate>rate) {
rate=temprate;
b= baiqiu;
z= heiqiu+baiqiu;
}
else continue;
}
continue;
}
结果正确。大家知道这是为什么么?
想到问题所在了吧?但是如果重写循环你是很难发现这个错误的,所以在定义循环时你一定要注意循环是否考虑完全。避免犯这样的错误。
一程序中的错误为:限制白球小于50,没有限制黑球(zongshu-baiqiu)小于50
答案当然谁都能猜到,就是只把一个白球放过去。我编了个循环试了试。遇到问题如下:
我假定一个瓶子中球总数为:zongshu,白球数为baiqiu,囚犯活下来的概率为rate。循环如下:
for( zongshu=1; zongshu<100; zongshu++){
for(baiqiu=0;(baiqiu<=zongshu)&&(baiqiu<=50); baiqiu++){
temprate=(double)baiqiu*0.5/(double)zongshu+(double)(50-baiqiu)*0.5/(double)(100-zongshu);
if(temprate>rate) {
rate=temprate;
b= baiqiu;
z= zongshu;
}
else continue;
}
continue;
}
这个循环是错误的,程序结果有问题,居然能把rate算到大于1。百思不得其解。而后我改了一下试试。定义了基于heiqiu和baiqiu的循环如下:
for(heiqiu=0;heiqiu<=50;heiqiu++){
for(baiqiu=1;baiqiu<=50;baiqiu++){
int zongshu=heiqiu+baiqiu;
temprate=(double)baiqiu*0.5/(double)zongshu+(double)(50-baiqiu)*0.5/(double)(100-zongshu);
if(temprate>rate) {
rate=temprate;
b= baiqiu;
z= heiqiu+baiqiu;
}
else continue;
}
continue;
}
结果正确。大家知道这是为什么么?
想到问题所在了吧?但是如果重写循环你是很难发现这个错误的,所以在定义循环时你一定要注意循环是否考虑完全。避免犯这样的错误。
一程序中的错误为:限制白球小于50,没有限制黑球(zongshu-baiqiu)小于50
相关文章推荐
- 一个游戏引发的思考(概率问题)
- 由全排列问题引发的关于for循环里嵌套递归的思考
- 由c++循环中局部变量地址不变而引发的思考
- 由Google Log库glog循环打印到一行引发的C++知识点思考
- 一个游戏引发的思考(概率问题)
- for语句引起一个死循环而引发的思考!!!
- JavaScript 数组循环条件自减到0时引发的思考
- 由循环次数设定引发的一些思考
- 一个与直觉相悖的概率问题引发的严肃思考(转自果壳)
- 关于Android中为什么主线程不会因为Looper.loop()里的死循环卡死?引发的思考,事实可能不是一个 epoll 那么 简单。
- WPF 布局心得 一个像素引发的问题和思考
- 一次外场宕机引发对linux内存管理的进一步思考--Linux虚拟地址空间如何分布
- 一个java面试题引发的思考
- mysql并发操作引发的一些思考
- 再次思考Z = X+Y,Z = XY的概率密度求解
- 由StreamWriter.WriteLine 引发对C#多线程的深入思考(一)
- 从校内CSS模板引发的思考
- 由阿里一道笔试题引发的思考
- java单例模式中构造器私有引发的一些思考
- 图解集合5:不正确地使用HashMap引发死循环及元素丢失