首页 > 其他 > 详细

面试题六十:n个骰子的点数

时间:2020-03-29 18:31:31      阅读:55      评论:0      收藏:0      [点我收藏+]
 

把n个骰子扔在地上,求出现和为s的概率
可得n<=s<=6n
方法:定义6n-n+1长度的数组,然后对所有可能出现的组合进行计算,把结果进行计数存进数组;递归
方法二:动态规划,大问题小化:考虑使用两个数组存储点子的总数之和出现的次数,每增一个骰子,是前几个数组值的和,因为6个面,所以前n的前6的和

   void Print_F1(int number) {
          if(number<1) return;
          int maxVaule=6;
          int [][]array=new int [2][number*maxVaule+1];
          int flag=0;
          //第一颗骰子
          for(int i=1;i<=maxVaule;i++)
              array[flag][i]=1;
          for(int k=2;k<=number;k++) {            
              //本项数组归零,
              for(int i=0;i<=k;++i)
                   array[1-flag][i]=0;

              for(int i=k;i<=maxVaule*k;i++) {
                   array[1-flag][i]=0;
                   //n=另一个数组n项前6的和,j<=i防止前面少于6项而出错
                   //每加一个骰子,则可选范围(1-6);没有0;所以不需要加本身
                   for(int j=1;j<=i&&j<=maxVaule;j++) 
                        array[1-flag][i]+=array[flag][i-j];
              }
              flag=1-flag;
              
          }
          //如果求概率,那么需要进行double运算
          //总数是maxVaule的number次方
          for(int i=number;i<=maxVaule*number;i++)
              System.out.print(array[flag][i]+" ");
     }

 

面试题六十:n个骰子的点数

原文:https://www.cnblogs.com/niliuxiaocheng/p/12593399.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!