以各 10% 的概率返回 [0-9] 中的一个数字

网上看到的一到算法题。

题目是给一个方法 foo(),能以各 50%的概率随机返回 0 或者 1。问题是基于 foo() 方法,实现一个 boo()方法,该方法能以各 10%的概率返回[0-9]中的一个数字。

foo() 方法返回 0 或 1,那么可以通过操作 foo() 来生成二进制数来实现。foo() 方法相当于抛一枚硬币,正反各 50%。抛4次硬币,共有16种组合。

分别是:

'0000', '0001', '0010', '0011',
'0100', '0101', '0110', '0111',
'1000', '1001', '1010', '1011',
'1100', '1101', '1110', '1111'

将得到的结果转为10进制数,然后判断是否小于10,小于则返回结果,大于则重新抛4次。这样就能已10%的概率返回[0-9]中的一个数字。

下面是Java的实现代码,随机返回 0 或者 1 是通过随机返回 0~99 的整数,然后取余。

import java.util.Random;

public class Test {

    /**
     * 50%的概率随机返回 0 或者 1
     */
    public int foo(){
        int seed = new Random().nextInt(100);
//        System.out.println("seed=" + seed);
        if(seed % 2 ==0){
            return 0;
        } else {
            return 1;
        }
    }

    /**
     * 以各 10%的概率返回[0-9]中的一个数字
     */
    public int boo() {
        String seed = String.valueOf(foo()) + String.valueOf(foo()) + String.valueOf(foo()) + String.valueOf(foo()); 
//        System.out.println(seed);
        int reslut = Integer.valueOf(seed, 2);
        while(reslut >= 10){
            reslut = boo();
        }
        return reslut;
    }


    public static void main(String[] args) {
        Test test = new Test();
        System.out.println(test.boo());
    }
}

原文链接:

https://www.cnblogs.com/poterliu/p/12582545.html

 

猜你喜欢

转载自www.cnblogs.com/poterliu/p/12582545.html
今日推荐