⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fac7_1.java

📁 java 算法设计与分析的好资料.由王晓东先生主编.
💻 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 + -