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为骰子个数)

  • 相关阅读:
    dotnet 控制台读写 Sqlite 提示 no such table 找不到文件
    dotnet 控制台读写 Sqlite 提示 no such table 找不到文件
    dotnet 控制台 Hangfire 后台定时任务
    dotnet 控制台 Hangfire 后台定时任务
    dotnet 获取指定进程的输入命令行
    dotnet 获取指定进程的输入命令行
    PHP sqrt() 函数
    PHP sinh() 函数
    PHP sin() 函数
    PHP round() 函数
  • 原文地址:https://www.cnblogs.com/churi/p/3600655.html
Copyright © 2011-2022 走看看