zoukankan      html  css  js  c++  java
  • 11181

    N friends go to the local super market together. The probability of their buying something from the
    market is p 1 ,p 2 ,p 3 ,...,p N respectively. After their marketing is finished you are given the information
    that exactly r of them has bought something and others have bought nothing. Given this information
    you will have to find their individual buying probability.
    Input
    The input file contains at most 50 sets of inputs. The description of each set is given below:
    First line of each set contains two integers N (1 ≤ N ≤ 20) and r (0 ≤ r ≤ N). Meaning of N and
    r are given in the problem statement. Each of the next N lines contains one floating-point number p i
    (0.1 < p i < 1) which actually denotes the buying probability of the i-th friend. All probability values
    should have at most two digits after the decimal point.
    Input is terminated by a case where the value of N and r is zero. This case should not be processes.
    Output
    For each line of input produce N +1 lines of output. First line contains the serial of output. Each of the
    next N lines contains a floating-point number which denotes the buying probability of the i-th friend
    given that exactly r has bought something. These values should have six digits after the decimal point.
    Follow the exact format shown in output for sample input. Small precision errors will be allowed. For
    reasonable precision level use double precision floating-point numbers.
    Sample Input


    3 2
    0.10
    0.20
    0.30
    5 1
    0.10
    0.10
    0.10
    0.10
    0.10
    0 0
    Sample Output


    Case 1:
    0.413043
    0.739130
    0.847826
    Case 2:
    0.200000
    0.200000
    0.200000
    0.200000
    0.200000

    题意:

    有 n 个人准备去逛超市,其中第 i 人购物的概率是 Pi ,逛完以后得知有 r 人买了东西,根据这一信息,计算每人买了东西的实际概率。

    x[i] 表示 第i个人是否买了东西 1买了0没买

    然后用 next_permutation();

    把所有的情况 表示出来

    在暴力求解了。。。条件概率,贝叶斯公式

    #include<iostream>
    #include<cstring>
    #include<cstdio>
    #include<algorithm>
    using namespace std;
    double  r[21];
    double sum[21];
    int x[21];
    double  tot;
    int n,m;
    void init(){
        memset(r,0,sizeof(r));
        memset(sum,0,sizeof(sum));
        memset(x,1,sizeof(x));
        for(int i=0;i<n-m;i++){
            x[i]=0;
        }
        tot=0;
        for(int i=0;i<n;i++){
            cin>>r[i];
        }
    }
    int main(){
        int k=1;double temp=0.0;
        while(cin>>n>>m&&n+m){
            init();
            do{
                temp=1;
                for(int i=0;i<n;i++){
                    if(x[i])temp*=r[i];
                    else temp*=1-r[i];
                }
                tot+=temp;
                for(int i=0;i<n;i++){
                    if(x[i])sum[i]+=temp;
                }
            }while(next_permutation(x,x+n));
            cout<<"Case "<<k++<<":"<<endl;
            for(int i=0;i<n;i++){
               printf("%f
    ",sum[i]/tot);
            }
        }
    }
    View Code
  • 相关阅读:
    C#中测量消耗的内存和时间的方法
    log4net和log2console的配置
    C#多语言编程
    C#和Qt实现的对于异常处理的一个使用策略
    分享一个小工具,提供源码,以便根据自己需要进行修改
    适用于关系型数据库的抽象工厂的数据库访问类
    一万小时定律(真正科学的学习方法)
    动态的SQL分页
    【转】数据库查询优化原则
    ssh 登录出现的几种错误以及解决办法
  • 原文地址:https://www.cnblogs.com/demodemo/p/4749017.html
Copyright © 2011-2022 走看看