Urn-ball Probabilities! UVA - 10169(概率、打表)

题目链接:Urn-ball Probabilities! UVA - 10169

题目大意:两个罐子初始时,一个里有一个红球,另一个里有一红一白两个球,每次有放回的从两个罐子里各取一个球,同时再各放入一个白球。输入n表示取n次球。求至少有一次取到两个红球的概率和每次都取到两个红球的概率。由于每次都取到红球的概率很小,因此输出其小数点到第一位非0的小数之间0的个数。

打表记录每个取球数对应的答案。对于第i次取球,1/(i*(i+1))表示该次取到两个红球的概率。用数组p来记录取n次球,每次都不是取到两个红球的概率,最后输出1-p[n]即可。用变量ans记录取n次球都为两个红球的概率,然后用数组cnt记录小数点后0的个数即可。

#include <iostream>
#include <cstdio>

using namespace std;

const int N=1e6;

double p[N+5];
int cnt[N+5];

int main()
{
    p[0]=1;
    cnt[0]=0;

    double ans=1;
    for(long long i=1;i<=N;i++)
    {
        double tem=1.0/(i*(i+1));
        ans*=tem;
        p[i]=(1-tem)*p[i-1];

        cnt[i]=cnt[i-1];
        while((int)(ans*10)==0)
            cnt[i]++,ans*=10;
    }

    int n;
    while(~scanf("%d",&n))
        printf("%lf %d\n",1-p[n],cnt[n]);

    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值