zoukankan      html  css  js  c++  java
  • uva 10169

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


    题目大意:在一个箱子中,原本有1个红球,然后任意取出(有放回)一个球,然后再往里放一个白球(每次取都要放进一个白球),给出n,表示取了n次球,要求输出至少有连续抽到两个红球的概率,以及没有连续抽到红球的概率,因为没有连续抽到红球的概率非常小,所以输出小数点后有几位为0.


    解题思路:将每两次去球作为一次讨论,p = 1/(i * (i + 1),然后每次叠乘(1 - p)就可以得到q, (1 - q)为第一个答案。然后每次叠乘p得到ans,计算ans小数点后的0的个数,即为第二个答案。


    #include <stdio.h>
    #include <stdlib.h>
    #include <math.h>
    const int N = 1000005;
    
    double q[N];
    int cnt[N];
    
    void init() {
    	double p = 1, ans = 1;
    	q[0] = 1;
    	cnt[0] = 0;
    
    	for (long long i = 1; i < N; i++) {
    		p = 1./(i * i + i);
    		q[i] = (1 - p) * q[i - 1];
    		ans *= p;
    		cnt[i] = cnt[i - 1];
    		while (floor(ans) < 1e-10) {
    			cnt[i]++;
    			ans *= 10;
    		}
    	}
    }
    
    int main () {
    	int n;
    	init();
    	while (scanf("%d", &n) == 1) {
    		printf("%.6lf %d
    ", 1 - q[n], cnt[n] - 1);
    	}
    	return 0;
    }
    


  • 相关阅读:
    JS-常用的数据结构之线性表
    Django 数据库增删改查
    Django 静态文件配置及request初识
    Django 基础
    jQuery
    前端之BOM和DOM
    前端js
    前端 css
    前端基础 html
    进度条
  • 原文地址:https://www.cnblogs.com/riskyer/p/3397989.html
Copyright © 2011-2022 走看看