题意:一开始,一个壶里有一个红球,一个壶里有一个红球和一个白球,每次从两个壶中各拿出一个球,放回后再向两个壶中各放入一个白球。问至少有一次同时拿到两个红球的概率,和一直拿到红球的概率的小数点后有多少个0。
思路:简单的概率递推,打表实现,没什么好说的。
AC代码如下:
#include<cstdio>
#include<cstring>
using namespace std;
typedef long long ll;
double p1[1000010],p2[1000010],eps=1e-7;
ll ans[1000010];
int main()
{
int i,j,k;
ll n=1;
p1[0]=0;p2[0]=1;
for(n=1;n<=1000000;n++)
{
p1[n]=p1[n-1]+(1-p1[n-1])/n/(n+1);
p2[n]=p2[n-1]/n/(n+1);
ans[n]=ans[n-1];
while(p2[n]*10<1)
{
p2[n]*=10;
ans[n]++;
}
}
while(~scanf("%lld",&n))
printf("%.6f %lld\n",p1[n],ans[n]);
}