程序设计思路:

假设有n个骰子,关键是需要统计每个点数出现的次数。首先分析第一个骰子点数和有16的点数,计算出1到6的每种点数 的次数,并将结果用一个数组pos1记录。然后分析有两个骰子时, 点数为K肯定是由上一次中点数为K-1,K-2,K-3,K-4,K-5,K-6的点数产生,即此时点数为K的次数为上一次点数为 K-1,K-2,K-3,K-4,K-5,K-6的次数之和,将本次计算的结果保存到另外一个数组pos2中,这样一直计算到n个骰子时,数组pos2中保存的值即为每个点数出现的次数。

技巧:

假设出现的点数为K,则将其出现的次数保存到pos[K]中;由n个骰子的点数来推出n+1个骰子的点数分布时,在计算出n+1个骰子的点数分布后,需要将上面提到的pos1数组清空,并且将pos2复制到pos1,然后再将pos2清空。

程序代码:

 #include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <vector>
#include <stack>
#include <queue>
#include <time.h>
using namespace std;
#define N 50
int num1[N] , num2[N] ;
void Show(int n); int main() {
int n ;
cin>>n ;
Show(n);
return 0;
}
void Show(int n){
memset(num1,0,N*sizeof(int));
memset(num2,0,N*sizeof(int));
for(int i = 1 ; i <= 6 ; i++) num1[i] = 1 ;
int i , j , k ;
for(i = 2 ; i <= n ; i++){
for(j = i ; j <= 6*i ; j++){
k = j-6 ;
if(k < i) k = i-1 ;
for( ; k < j ; k++) num2[j] += num1[k];
}
memset(num1,0,N*sizeof(int));
for(int m = i ; m <= 6*i ; m++) num1[m] = num2[m];
memset(num2,0,N*sizeof(int));
}
cout<<"The probability distribution of "<<n<<" dices"<<endl<<endl;
cout<<"Point: \t"<<"Probability:"<<endl;;
for(int kkk = n ; kkk <= 6*n ; kkk++){
cout<<kkk<<": \t"<<num1[kkk]<<"/"<<(pow(6.0,n))<<endl;
}
}

  

说明:本程序试用于1-8个骰子的概率分布,如果需要增大骰子的数目,可以修改宏定义中的N值(N = 6*n +1 , 其中n为骰子个数)

N个骰子的点数和的概率分布的更多相关文章

  1. 剑指offer-Q60 n个骰子的点数

    python版本代码 g_maxValue = 6 # 单个骰子最大的点数 def PrintProbability(number): ''' :param number: 骰子的个数 :return ...

  2. 【编程题目】n 个骰子的点数

    67.俩个闲玩娱乐(运算).2.n 个骰子的点数.把 n 个骰子扔在地上,所有骰子朝上一面的点数之和为 S.输入 n,打印出 S 的所有可能的值出现的概率. 思路:用递归把每个骰子的可能情况变量,记录 ...

  3. 【面试题043】n个骰子的点数

    [面试题043]n个骰子的点数 题目:     把n个骰子扔在地上,所有骰子朝上一面的点数之和为s, 输入n,打印出s的所有可能的值出现的概率.   n个骰子的总点数,最小为n,最大为6n,根据排列组 ...

  4. n个骰子的点数

    把n个骰子扔在地上,所有骰子朝上的一面的点数之和为s.输入n,打印出s的所有可能的值和出现的概率. 解法一:基于递归求骰子点数. /////////////////基于递归求骰子点数///////// ...

  5. 【剑指offer】面试题43:n个骰子的点数

    第一种思路是,每一个骰子的点数从最小到最大,如果为1-6,那么全部的骰子从最小1開始,我们如果一种从左向右的排列,右边的最低,索引从最低開始,推断和的情况. def setTo1(dices, sta ...

  6. n 个骰子的点数

    把 n 个骰子仍在地上,求点数和为 s 的概率. java: public List<Map.Entry<Integer, Double>> dicesSum(int n) { ...

  7. n个骰子的点数之和

    题目:把n个骰子扔在地上,所有骰子朝上一面的点数之和为S.输入n,打印出S的所有可能的值出现的概率. 解题思路:动态规划 第一步,确定问题解的表达式.可将f(n, s) 表示n个骰子点数的和为s的排列 ...

  8. 《剑指offer(第二版)》面试题60——n个骰子的点数

    一.题目描述 把n个骰子仍在地上,所有的骰子朝上的一面的点数之和为s,输入n,打印出s所有可能的值出现的概率. 二.题解 <剑指offer>上给出的两种方法,尤其是代码,晦涩难懂且没有注释 ...

  9. [剑指Offer]60-n个骰子的点数

    题意 输入骰子个数n,打印出所有骰子朝上的点的点数之和,及对应的概率. 题解 循环. n个骰子,点数之和在n~6n范围内.计算n个骰子扔出和为m的情况数,等于n-1个骰子扔出m-1,m-2...m-6 ...

随机推荐

  1. Eval()、XPath() 和 Bind() 这类数据绑定方法只能在数据绑定控件的上下文中使用

    原文:Eval().XPath() 和 Bind() 这类数据绑定方法只能在数据绑定控件的上下文中使用 “/vs2005”应用程序中的服务器错误.--------------------------- ...

  2. crawler_wireshark 过滤基础知识

    一.IP过滤:包括来源IP或者目标IP等于某个IP比如:ip.src addr==192.168.0.208  or ip.src addr eq 192.168.0.208 显示来源IP       ...

  3. iOS_文章3党库SDWebImage

    1,下载的文章3党库SDWebImage代码包增加到project 2,进入project的Build Phases,将源代码包里面的所有.m文件所有加入到project 3,导入第3方类库依赖的两个 ...

  4. AlphaBlend參数BLENDFUNCTION

    AlphaBlend是Window自带的GDI函数,在作GUI的时候为了达到更美丽的效果我们经常常使用它. BLENDFUNCTION是AlphaBlend用控制透明效果的重要參数. 定义例如以下: ...

  5. WebBrowser编程简述

    原文:WebBrowser编程简述 1.初始化和终止化(Initialization & Finalization) 大家在执行TWebBrowser的某个方法以进行期望的操作,如ExecWB ...

  6. new 和delete

    转自:http://www.cnblogs.com/charley_yang/archive/2010/12/08/1899982.html 一直对C++中的delete和delete[]的区别不甚了 ...

  7. JS 数组array方法push, pop, unshift, shift, slice,splice,contact, join, sort

    Array:数组对象用来在单独的变量名中存储一系列的值   定义数组:         1. var arrayObj = new Array();         2. var arrayObj = ...

  8. 专访雷水果国:离1.5K至18K 一个程序猿5每年的成长之路

    我只是一个小菜鸟,对于自主学习和交流PHP(jquery,linux,lamp,shell,javascript,server)等一系列的知识.小菜鸟创建了一个群.希望光临本博客的人能够进来交流. 寻 ...

  9. CSS3制作日历

    目标是制作如下面DEMO显示的一个日历效果: HTML Markup 先来看看其结构: <div class="calendar"> <span class=&q ...

  10. dom03

    鼠标事件: 键盘事件: //通过class获取元素,封装一个通过class获取元素的方法 //IE10以下不支持document.getElementByClass() function getByC ...