数学公式题

题目描述

一个盒子里面放k种颜色的球,第i种颜色的球有Ai个,每次有放回的取出一个球并得到该球的颜色。问在取出过程中得到所有颜色之前需要取多少次(K已知,Ai已知)

分析:举例有黑白两种颜色的球,分别是5个和10个,每次概率相等的取球。计算拿到2种颜色时取球次数的期望
可以取2~无穷次,因为每次是等概率取。(该例结果为3.500000)
该题就是算累加和,需要将数学累加公式实现一遍并且需要注意精度问题,test case 有三分之一没过,实在不懂为啥,又不能再次提交,烦躁呀!

import java.util.Scanner;

class Main{
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        while (in.hasNext()) {

            int k = Integer.valueOf(in.next());
            int[] balls = new int[k];

            for (int i = 0; i < balls.length; i++) {
                balls[i] = Integer.valueOf(in.next());
            }
            double[] eachBallProbability = new double[k];
            double result = 0;
            int sumBalls = 0;
            for (int i = 0; i < balls.length; i++) {
                sumBalls += balls[i];
            }
            
            for (int i = 0; i < eachBallProbability.length; i++) {
                eachBallProbability[i] =(double) balls[i] / sumBalls;
            }
            for (int i = 0; i < eachBallProbability.length; i++) {
                result += getExpected(k, eachBallProbability[i]);
            }
                System.out.println(result);
        }
    }
    // getExpected 用于计算每种颜色期望的公式,题解就是返回K种期望的和,数学推导公式不理解就去好好复习下高中数列
    public static double getExpected(int k, double p){
        double result = 0;
        
        result = k * Math.pow(1-p, k-1) + Math.pow(1-p, k)/p;
        
        System.out.println("result:" + result);
        
        return result;
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容