一、题目
给你一个随机函数f,等概率返回a-b
中的一个数字,在不改变随机函数机制的情况下,实现c-d
的等概率返回。
二、解题思路
1、步骤
分两步即可
1)构造出等概率返回0、1的随机函数f1()
2)通过函数f1()构造等概率返回c-d
的函数
2、例子
例子 a-b为
2-8
,c-d
为3-9
package leetcode.test;
import java.util.Random;
public class ReturnTest {
public static void main(String[] args) {
int[] nums=new int[10];
for(int i=0;i<10000_0000;i++) {
nums[f2()]++;
}
for(int i=0;i<nums.length;i++) {
System.out.println(i+":"+nums[i]);
}
}
private static int f1() {
// TODO Auto-generated method stub
int ans=0;
do {
ans=f();
}while(ans==5);
return ans<5?0:1;
}
private static int f() {
// TODO Auto-generated method stub
Random r=new Random();
return r.nextInt(7)+2;
}
private static int f2() {
int ans=0;
do {
ans=(f1()<<2)+(f1()<<1)+(f1()<<0);
}while(ans==7);//ans等概率0-6
return ans+3;
}
}
代码实现:
下图可证明f函数等概率返回2-8
的正确性
下图可证明f1函数等概率返回0-1
的正确性
证明最终等概率返回3-9