时间限制:1秒 内存限制:64M
【问题描述】
有这么一个电视节目:你的面前有3个门,其中两扇门里是奶牛,另一扇门里则藏着奖品——一辆豪华小轿车。在你选择一扇门之后,门并不会立即打开。这时,主持人会给你个提示,具体方法是打开其中一扇有奶牛的门(不会打开你已经选择的那个门,即使里面是牛)。接下来你有两种可能的决策:保持先前的选择,或者换成另一扇未开的门。当然,你最终选择打开的那扇门后面的东西就归你了。
在这个例子中,你能得到轿车的概率是2/3,方法是总是改变自己的选择。2/3这个数是这样得到的:如果你开始选择的是藏有牛的两个门之一,你肯定能换到藏有车的那个门,因为主持人已经让你看到了另一个牛;而如果如果你开始选择的就是有车的门,就会换成剩下的牛并且输掉奖品。由于你的最初选择是任意的,因此选错的概率是2/3。也正是这个2/3的情况让你能换到那辆车(另外1/3的情况你会从车换到牛)。
现在把问题推广一下,假设有a头牛,b辆车(门的总数为a+b),你最终选择前主持人会替你打开C扇有牛的们,输出“总是换门”的策略下,赢得车的概率。
【输入格式】
包含若干组数据,每组数据包含a,b,c三个整数,他们的意义如题目描述。
【输出格式】
每组数据的答案输出一行一个实数,保留5位小数。
【输入样例】
2 1 1
5 3 2
2000 2700 900
【输出样例】
0.66667
0.52500
0.71056
【数据范围】
1<=a<=10000,1<=b<=10000,0<=c
#include<cstdlib>
#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
int main()
{
double a,b,c;
while(scanf("%lf%lf%lf",&a,&b,&c)==3)
printf("%.5lf\n",(b*(b-1)+a*b)/((a+b)*(a+b-c-1)));
return 0;
}