标签:printf 点击 个人 scanf def 概率 main turn get
有n个人准备去超市逛,其中第i个人买东西的概率是P i 。逛完以后你得知有r个人买了东
西。根据这一信息,请计算每个人实际买了东西的概率。输入n(1≤n≤20)和r(0≤r≤n),
输出每个人实际买了东西的概率。
概率
套公式
#include <cstring> #include <cstdio> #define N 25 int n,r; bool vis[N]; double p[N],z,ans[N]; void dfs(int pos,int num) { if(num==r) { double tmp=1; for(int i=1;i<=n;++i) { if(vis[i]) tmp*=p[i]; else tmp*=(1-p[i]); } z+=tmp; for(int i=1;i<=n;++i) if(vis[i]) ans[i]+=tmp; } for(int i=pos+1;i<=n;++i) { vis[i]=1; dfs(i,num+1); vis[i]=0; } } int Main() { int Case=0; while(scanf("%d%d",&n,&r)!=EOF) { if(n==0&&r==0) break; z=0; memset(ans,0,sizeof(ans)); memset(vis,0,sizeof(vis)); for(int i=1;i<=n;++i) scanf("%lf",&p[i]); dfs(0,0); printf("Case %d:\n",++Case); for(int i=1;i<=n;++i) printf("%.6lf\n",ans[i]/z); } return 0; } int sb=Main(); int main(int argc,char *argv[]){;}
标签:printf 点击 个人 scanf def 概率 main turn get
原文地址:http://www.cnblogs.com/ruojisun/p/7606034.html