如何用一个随机函数得到另一个随机函数

  • 时间:
  • 来源:互联网
  • 文章标签:

题目描述:

  有一个函数fun1能返回0和1两个值,返回0和1 的概率都是2/1,文怎么利用这个函数得到另一个函数fun2,使得fun2也只能返回0和1,且返回0的概率为1.4,返回1 的概率为3/4。

分析:

  fun1得1与0的概率都为1/2。因此可以调用两次fun1,分别生成两个值a1与a2,用这两个数组成一个二进制的a2a1,它的取值的可能性为00,01,10,11,并且得到的每个值的概率都为(1/2)*(1/2)=1/4。因此如果得到的结果为00,则返回0(概率为1/4),其他情况则返回1(概率为3/4)。

实现代码:

package lock;

import java.util.Random;

public class T22 {
	//返回0和1的概率都为50%
	private static int fun1()
	{
		Random random=new Random();
		return random.nextInt(2);
	}
	//返回0的概率为25%,返回1的概率为75%
	public static int fun2()
	{
		int a1=fun1();
		int a2=fun1();
		int tmp=a1;
		tmp|=(a2<<1);
		if(tmp==0)
			return 0;
		else
			return 1;
	}
	

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int i;
		for(i=0;i<16;i++)
			System.out.print(fun2()+"");
		System.out.println();
		for(i=0;i<16;i++)
			System.out.print(fun2()+"");

	}

}

运行结果:

在这里插入图片描述
  由于结果是随机的,调用的次数越大,返回的结果就越接近1/4与3/4。

本文链接http://www.taodudu.cc/news/show-1781758.html