public class ProbabilityOfDice {
/**
* Q67 n个骰子的点数
* 把n个骰子扔在地上,所有骰子朝上一面的点数之和为S。输入n,打印出S的所有可能的值出现的概率。
* 在以下求解过程中,我们把骰子看作是有序的。
* 例如当n=2时,我们认为(1,2)和(2,1)是两种不同的情况
*/
private static int MAX=6;
public static void main(String[] args) {
int n=2;
printProbabilityOfDice(n);//solution 1,use recursion
System.out.println("============");
printProbabilityOfDice2(n);//solution 2,use DP
}
public static void printProbabilityOfDice(int n){
if(n<1){
return;
}
double total=Math.pow(MAX, n);
int len=n*MAX-n*1+1;//the sum of n dices is from n*1 to n*MAX
int[] times=new int[len];
for(int i=1;i<=MAX;i++){//initial the first dice.
probabilityOfDice(n,i,n,0,times);//count the times of each possible sum
}
for(int i=0;i<len;i++){
System.out.println((i+n)+","+times[i]+"/"+total);
}
}
public static void probabilityOfDice(int n,int curDiceValue,int numOfDices,int curSum,int[] times){
if(numOfDices==1){
int sum=curSum+curDiceValue;
times[sum-n]++;//n*1 to n*MAX <---> 0 to len
}else{
int sum=curSum+curDiceValue;
for(int i=1;i<=MAX;i++){
probabilityOfDice(n,i,numOfDices-1,sum,times);
}
}
}
/*
有k-1个骰子时,再增加一个骰子,这个骰子的点数只可能为1、2、3、4、5或6。那k个骰子得到点数和为n的情况有:
(k-1,n-1):第k个骰子投了点数1
(k-1,n-2):第k个骰子投了点数2
(k-1,n-3):第k个骰子投了点数3
....
(k-1,n-6):第k个骰子投了点数6
在k-1个骰子的基础上,再增加一个骰子出现点数和为n的结果只有这6种情况!
所以:f(k,n)=f(k-1,n-1)+f(k-1,n-2)+f(k-1,n-3)+f(k-1,n-4)+f(k-1,n-5)+f(k-1,n-6)
初始化:有1个骰子,f(1,1)=f(1,2)=f(1,3)=f(1,4)=f(1,5)=f(1,6)=1。
*/
public static void printProbabilityOfDice2(int n){
if(n<1){
return;
}
double total=Math.pow(MAX, n);
int maxSum=n*MAX;
double[][] f=new double[n+1][n*MAX+1];
for(int i=1;i<=MAX;i++){
f[1][i]=1;
}
for(int k=2;k<=n;k++){
for(int sum=n;sum<=maxSum;sum++){
for(int i=1;sum-i>=1&&i<=MAX;i++){
f[k][sum]+=f[k-1][sum-i];
}
}
}
for(int sum=n;sum<=maxSum;sum++){
System.out.println(sum+","+f[n][sum]+"/"+total);
}
}
}
分享到:
相关推荐
游戏规则实际上很简单:游戏者每次投掷两颗骰子,每个骰子是一个正方体,有6面,上面分别标有1、2、3、4、5、6个圆点,当骰子停止时,将每个骰子朝上的点数相加,在第一次投掷骰子时,如果所得到的和为7或11,那么...
在本实验中,“VC大量骰子投掷多次统计实验MFC”主要涉及计算机编程和概率统计领域的知识。实验采用Microsoft Foundation Class (MFC) 库,这是一个C++库,用于构建Windows应用程序。通过MFC,我们可以高效地创建...
内容概要:通过html+css+js实现骰子游戏,点击开始后骰子旋转,结束后骰子随机一面朝上; 核心内容:css 3d旋转 、js setInterval函数、随机数等 可以学到什么:css 3d构建立方体,js setInterval函数的使用及清除;...
在CrazyDice项目中,开发者可能创建了一个物理世界,将骰子作为一个物理对象加入其中,设置其质量、形状和材质属性。然后,通过物理引擎的模拟,骰子在空中翻滚,最终落地并静止在一个随机面朝上的状态。这个过程...
由于骰子是均匀的,每一面朝上的概率相等均为 1/6,所以是一个古典概型。考虑随机事件 A=“偶数点朝上”={2, 4, 6},其概率 P(A)=3/6=1/2。 例 2:设有 N 件产品,其中有 D 件次品。今从中任取 n 件,问其中恰有 ...
- 选取两个数m和n,构造二次函数y=(x-m)^2+n,顶点在坐标轴上意味着n=0或者m=-1/2。计算这种情形的概率需要考虑所有可能的m和n的组合。 9. **独立事件的概率** - 小明和小华各自选择活动,他们同时选择同一活动的...
1.5.10. 输入一个正数 n,输出所有和为 n 连续正数序列 ................................125 1.6. 面试题集合(五) .......................................................................................126...
- 同时掷两个骰子:总的基本事件数是36(2个骰子,每个骰子6个面),而点数之和为5的结果包括(1,4)、(2,3)和(3,2)这3种情况。 通过以上概念和实例,我们可以理解古典概型在概率计算中的应用,以及如何根据...
在骰子中,点数为1的情况只有一种,而偶数点数(2, 4, 6)有三种可能,因此点数为偶数的可能性比点数为1的大。 4. **概率的计算**: - 在比较可能性时,我们可以用概率来量化这种差异。点数为1的概率是1/6,而点数...
2. 同时掷一枚硬币和一枚骰子,出现硬币正面朝上且骰子点数大于4(5,6)的可能性是1/2 * 2/6=1/6。 3. 对于两个圆盘的问题,具体结果数和可能性大小需要根据圆盘的具体划分来计算,这里没有给出足够的信息。 以上是...
- 点数之和为5的概率:P(和为5) = 4/36 = 1/9。 通过以上的讲解,我们理解了古典概型的基本概念,如何判断一个试验是否属于古典概型,以及如何计算古典概型中的概率。在实际的教学设计中,教师可以使用类似的实际...
例如,事件A是投掷两个骰子的点数之和为奇数,事件B是两个骰子的点数奇偶性不同,这两个事件实际上是相等的,因为它们都包含了所有奇数点数之和的情况。 事件的运算是概率论中的核心概念,包括对立事件、并事件、交...
由于骰子的点数范围是1到6,所以点数之和小于2是不可能事件,而点数之和大于12也是不可能事件,因此这两个事件的概率都是0。 通过这样的练习,学生可以深入理解概率的计算方法,以及如何运用频率来估计未知概率,这...
- 题目10:“有A,B两枚质地均匀的正方体骰子(骰子每个面上的点数分别为1,2,3,4,5,6),小王掷骰子A,朝上的数字记作x;小张掷骰子B,朝上的数字记作y。在平面直角坐标系中有一矩形,四个顶点的坐标分别为(0,0),(6,0),...
掷两个骰子的总结果数为36,而点数之和为5的结果有四种(1,4)、(2,3)、(3,2)和(4,1)。因此,点数之和为5的概率就是这四种情况在所有可能结果中所占的比例,即4/36=1/9。 总结来说,古典概型是一种概率模型,...
此外,PPT还提出了一个骰子游戏的例子,玩家需要选择一个数字,然后掷两个骰子,如果两骰子点数之和等于所选数字,则获胜。为了找出最佳策略,可以列出所有掷骰子的组合,并计算每个数字出现的次数,选择出现次数...
在这个项目中,VB6被用来设计和编写骰子旋转的控制逻辑。 2. **3D图形编程**:要实现3D旋转效果,开发者需要理解3D坐标系统、矩阵变换和向量运算等概念。VB6本身并不直接支持3D图形,但可以通过GDI+或DirectX等库来...
在这个高中数学必修三的PPT课件中,古典概型被用来分析和理解掷骰子、抽取字母等试验的概率。 首先,一个基本事件是试验中可能出现的每一个单一结果。例如,掷一枚均匀的硬币,基本事件有两个:正面朝上和反面朝上...