zoukankan      html  css  js  c++  java
  • N个骰子的点数和的概率分布

    程序设计思路:

    N个骰子的点数和的概率分布 - 纯真年代 - 马文浩的博客

        假设有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: 	"<<"Probability:"<<endl;;
         for(int kkk = n ; kkk <= 6*n ;  kkk++){
             cout<<kkk<<": 	"<<num1[kkk]<<"/"<<(pow(6.0,n))<<endl;
         }
     }
    

      

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

  • 相关阅读:
    分享一下前一段时间的开发总结
    循环,梦
    从C#程序中调用非受管DLLs
    大学生零工资就业,谁之过?
    国外宽带用户的上网速度能达到多少呢?
    天沉沉,来个好天气吧
    虚伪,不只是形容一个人
    回头思考关于xml的使用
    从毕业生当中看人与人的差距
    C# 编码规则
  • 原文地址:https://www.cnblogs.com/churi/p/3600655.html
Copyright © 2011-2022 走看看