随机函数等概率返回问题

一、题目

给你一个随机函数f,等概率返回a-b中的一个数字,在不改变随机函数机制的情况下,实现c-d的等概率返回。

二、解题思路

1、步骤

分两步即可
1)构造出等概率返回0、1的随机函数f1()
2)通过函数f1()构造等概率返回c-d的函数

2、例子

例子 a-b为2-8c-d3-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
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/m0_51801058/article/details/115256509