1、给一个函数,返回 0 和 1,概率为 p 和 1-p,请你实现一个函数,使得返回 01 概率一样。
答案:
import java.util.Random;
public class RandomTest {
/**
* assume:
* Rate(zero) = p
* Rate(one) = 1 - p
*/
public static int generateZeroAndOne() {
return new Random().nextInt(2);
}
/**
* so:
* Rate(zero) = 1 - p
* Rate(one) = p
*/
public static int generateOneAndZero() {
return 1 - generateZeroAndOne();
}
/**
* though looks (Rate(zero) = p * (1 - p)) == (Rate(one) = (1 - p) * p)
* but:
* 1 * 1 -> 1
* 1 * 0 -> 0
* 0 * 1 -> 0
* 0 * 0 -> 0
* Rate(zero) = 3 / 4 * p * (1 - p)
* Rate(one) = 1 / 4 * (1 - p) * p
* <p>
* <p>
* 1 == 1 -> true
* 1 == 0 -> false
* 0 == 1 -> false
* 0 == 0 -> true
* Rate(zero) = 1 / 2 * p * (1 - p)
* Rate(one) = 1 / 2 * (1 - p) * p
*/
public static int rate() {
int a = generateOneAndZero();//zero: 1-p one: p
int b = generateZeroAndOne();//zero: p one: 1-p
//1 means (a = 1 and b = 0) or (a is 0 and b = 1)
//0 means (a = 0 and b = 0) or (a == 1 and b == 1)
return a ^ b;
}
}
答案为原创。