概率计算

2018-09-21  本文已影响13人  放开那个BUG

一般笔试面试中常会有概率问题的出现(算法较多),他们有这样的规律:


概率的应用有两块:


现在我们来看案例:

案例1



所以两强不相遇的概率为

案例3


案例4



关于步骤5的解释是,如果产生了21,22,23,24,那么重新进行步骤4,直到结果在0到20之间,这样产生21到24的概率会平均分配到0~20之间。但是我的疑问是,如果用其他方法,不也可以这么产生吗?

案例5


案例6


如果调用f()两次,返回的结果仍然是[0, X)区间上的话,那么两次调用f()的返回值都必须落在[0, X)区间上,否则就会返回大于X的数了。所有,k次同理

案例7

首先,先插一条程序

//这个程序确实证明了Math.random()是从[0,1)随机的,但是这里不能用,因为可能
//打印M个数的时候,有可能重复打印。
public static void main(String[] args){
        int[] array = new int[]{1, 2, 3, 4, 5};
        ArrayList<Integer> list1 = new ArrayList<>();
        ArrayList<Integer> list2 = new ArrayList<>();
        ArrayList<Integer> list3 = new ArrayList<>();
        ArrayList<Integer> list4 = new ArrayList<>();
        ArrayList<Integer> list5 = new ArrayList<>();
        for(int i = 0; i < 100000; i++){
            int num = array[(int)(Math.random() * array.length)];
            if(num == 1){
                list1.add(num);
            }else if(num == 2){
                list2.add(num);
            }else if(num == 3){
                list3.add(num);
            }else if(num == 4){
                list4.add(num);
            }else if(num == 5){
                list5.add(num);
            }
        }
        System.out.println(list1.size());
        System.out.println(list2.size());
        System.out.println(list3.size());
        System.out.println(list4.size());
        System.out.println(list5.size());
    }


把每次打印的数都交换到最后,是防止重复打印

案例8





上一篇 下一篇

猜你喜欢

热点阅读