zoukankan      html  css  js  c++  java
  • UVa 10491 Cows and Cars (条件概率)

    题目

    题目大意

    有这么一个电视节目: 你的面前有(3)个门, 其中两扇门里是奶牛, 另外一扇门里则藏着奖品——一辆豪华小轿车。在你选择一扇门之后, 们并不会立即打开。这时, 主持人会给你个提示, 具体方法是打开其中一扇有奶牛的门(不会打开你已经选择的那个门, 即使里面是牛)。接下来你有两种可能的决策: 保持先前的选择, 或者换成另外一扇未开的门。当然, 你最终选择打开的那扇门后面的东西就归你了。

    在这个例子里面, 你能得到轿车的概率是(frac{2}{3}), 方法是总是改变自己的选择。

    现在把问题推广一下, 假设有(a)头牛, (b)辆车(门的总数为(a + b)), 在最终选择前主持人会替你打开(c)个有牛的门((1 ≤ a ≤ 10000), (1 ≤ b ≤ 10000), (0 ≤ c < a)), 输出"总是换门"的策略下, 赢得车的概率。

    题解

    打开(c)个牛门后, 还剩(a - c)头牛, 未开的门总数是(a + b - c), 其中有(a + b - c - 1)个门可以换, 然后分两种情况讨论:

    1. 一开始选中了牛(概率为(frac{a}{a + b})), 则可选门中车门有(b)个。这种情况的总概率为(frac{ab}{(a + b)(a + b - c - 1)});
    2. 一开始选中了车(概率为(frac{b}{a + b})), 则可选门中车门有(b - 1), 概率为(frac{b(b - 1)}{(a + b)(a + b - c - 1)})
      加起来得到概率为(frac{ab + b(b - 1)}{(a + b)(a + b - c - 1)})

    代码

    #include <cstdio>
    double a, b, c;
    int main(int argc, char const *argv[]) {
      while (~scanf("%lf %lf %lf", &a, &b, &c)) {
        printf("%.5lf
    ", (a * b + b * (b - 1)) / ((a + b) * (a + b - c - 1)));
      }
      return 0;
    }
    
  • 相关阅读:
    唯有坚持方能成功
    Java程序猿,你为什么要关注Scala
    HDU 2871 Memory Control(线段树)
    SQL 合并两个结果集 一个倒序,一个正序
    Charm Bracelet(poj3624)(01背包)
    Dijkstra算法,求单源最短路径(包括路径)
    aix平台安装10.2.0.5的CRS时遇到的bug
    Java语言基础系列之1--用IDEA编写HelloWorld
    UVA 10986 Sending email SPFA
    NumberProgressBar开源项目学习
  • 原文地址:https://www.cnblogs.com/forth/p/9715352.html
Copyright © 2011-2022 走看看