思路:
1、执行两次给的函数,第一次返回1,第二次返回0的概率为(1-p)p
2、执行两次给的函数,第一次返回0,第二次返回1的概率为p(1-p)
3、循环执行两次函数,如果一次返回0,一次返回1则返回0或1
代码:
package com.datastructure.other;
/**
* 相同概率问题
*
* 给一个函数,返回 0 和 1,概率为 p 和 1-p,请你实现一个函数,使得返回 0 1 概率一样
*/
public class SameProbability {
/**
* 定义函数,返回0概率为p;返回1概率为1-p
*
*/
public int getZeroOrOne() {
// 略
return 0;
}
/**
* 生成0的概率为p,生成1的概率为1-p。
*
* 生成0 1 概率为p(1-p)
* 生成1 0概率为(1-p)p
* 则相等的
*/
public int getZeroOrOneSameProbability() {
while (true) {
int i = getZeroOrOne();
int j = getZeroOrOne();
if (i == 0 && j == 1) {
return 1;
}
if (i == 1 && j == 0) {
return 0;
}
}
}
}