网上看到的一到算法题。
题目是给一个方法 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