博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Algs4-1.1.35模拟投骰子
阅读量:6257 次
发布时间:2019-06-22

本文共 1183 字,大约阅读时间需要 3 分钟。

1.1.35模拟投骰子。以下代码能够计算每两个骰子之和的准确概率分布:

public class Test
{
    public static void main(String[] args)
    {
        int SIDES=6;
        double[] dist=new double[2*SIDES+1];
        for (int i=1;i<=SIDES;i++)
            for (int j=1;j<=SIDES;j++)
                 dist[i+j]+=1.0;
       
        for (int k=2;k<=2*SIDES;k++)
            dist[k]/=36.0;
        
    }
 }
dist[i]的值就是两个骰子之和为i的概率。用实验模拟N次掷骰子,并在计算两个1到6之间的随机整数之和时记录每个值的出现频率以验证它们的概率。N要多大才能够保证你的经验数据和准确数据的吻合程度达到小数点后三位?
解:约10^8次
public class Test
{
    public static void main(String[] args)
    {
     
        int SIDES=6;
        //二维数组,第一维用来存两个骰子掷出的点数和,第二维的1元素存理论概率,第二维的2元素存已掷到的次数,第二维的3元素存实际概率
        double[][] dist=new double[2*SIDES+1][3];
        for (int i=1;i<=SIDES;i++)
            for (int j=1;j<=SIDES;j++)
                 dist[i+j][0]+=1.0;
       //
        for (int k=2;k<=2*SIDES;k++)
            dist[k][0]/=36.0;
       //
        int N=0;
        int dist1;
        int dist2;
       //isOK=true时表示实际概率满足精度要求
        boolean isOK=false;
       while (!isOK)
        {
         N++;
         dist1=StdRandom.uniform(1,SIDES+1);
         dist2=StdRandom.uniform(1,SIDES+1);
         dist[dist1+dist2][1]++;
         dist[dist1+dist2][2]=dist[dist1+dist2][1]/N;
         //
         isOK=true;
         //所有点数和的实际概率都满足精度时才视为满足精度
         for(int i=2;i<=2*SIDES;i++)
         {
             if (Math.abs(dist[i][0]-dist[i][2])>=0.0001)
             {
                 isOK=false;
                 break;
             }  
         }//end for
       }//end while
       StdOut.printf("Limt times is %d",N);
   }
}
图片

转载于:https://www.cnblogs.com/longjin2018/p/9848732.html

你可能感兴趣的文章
Android开发之ListView-SimpleAdapter的使用
查看>>
App.config提示错误“配置系统未能初始化”
查看>>
Angular - - ngChange、ngChecked、ngClick、ngDblclick
查看>>
JAVA学习第五十九课 — 网络编程概述
查看>>
远程共享文件夹
查看>>
convert2utf8withbom
查看>>
Codeforces Round #336 (Div. 2)A. Saitama Destroys Hotel 水题
查看>>
poj2752 Seek the Name, Seek the Fame(next数组的运用)
查看>>
pgpgin|pgpgout|pswpin|pswpout意义与差异
查看>>
全排列(递归与非递归实现)
查看>>
[转] C/C++中printf和C++中cout的输出格式
查看>>
swift 如何实现点击view后显示灰色背景
查看>>
【Android】3.9 覆盖物功能
查看>>
Plus One
查看>>
Git -- 创建版本库
查看>>
myeclipse 怎么安装与激活
查看>>
Atitit.异步编程的发展历史 1.1. TAP & async/await
查看>>
RTP timestamp与帧率及时钟频率的关系
查看>>
企业门户平台解决方案
查看>>
过滤器入门
查看>>