📄 fac7_1.java
字号:
//本程序取自王晓东编著“算法分析与设计”第 241 页,例
//随机数生成问题的解法
import java.lang.System;
class Random
{
private long seed;//当前种子
private final static long multiplier=0x5DEECE66DL;
private final static long adder=0xBL;
private final static long mask=(1L<<48)-1;
//构造方法,自动产生种子
public Random(){
this.seed=System.currentTimeMillis();}
//构造方法,缺省值0表示由系统自动产生种子
public Random(long seed)
{
if(seed==0)this.seed=System.currentTimeMillis();
else this.seed=seed;
}
//产生[0,n-1]之间的随机整数
public int random(int n)
{
if(n<=0)
throw new IllegalArgumentException(" n must be positive");
seed=(seed*multiplier+adder) & mask;
return ((int)(seed>>>17)%n);
}
//产生[0,1]之间的随机实数
public double fRandom()
{
return random(Integer.MAX_VALUE)/(double)(Integer.MAX_VALUE);
}
}
public class Fac7_1{
static Random coinToss;
public static int tossCoins(int numberCoins)
{//随即抛硬币
int i,tosses=0;
for(i=0;i<numberCoins;i++)
//random(2)=1 表示正面
tosses+=coinToss.random(2);
return tosses;
}
/** 测试程序 */
public static void main(String args[])
{//模拟随机抛硬币事件
coinToss= new Random();
int ncoins=10;
long ntosses=50000L;
//heads[i]是得到i次正面的次数
int i;
long []heads=new long[ncoins+1];
int j,position;
//初始化数组heads
for(j=0;j<ncoins+1;j++)
heads[j]=0;
//重复50000次模拟
for(i=0;i<ntosses;i++)
heads[tossCoins(ncoins)]++;
//输出频率图
System.out.println();
for(i=0;i<=ncoins;i++)
{
position=(int)((float)heads[i]/ncoins/72);
System.out.print(" "+i+" ");
for(j=0;j<position-1;j++)
System.out.print(" ");
System.out.println("*");
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -