剑指Offer43 n个骰子点数概率

 1 /*************************************************************************
 2     > File Name: 43_Dics.cpp
 3     > Author: Juntaran
 4     > Mail: [email protected]
 5     > Created Time: 2016年09月04日 星期日 16时46分00秒
 6  ************************************************************************/
 7
 8 #define maxNum 6     // 骰子最多为6
 9
10 #include <stdio.h>
11 #include <math.h>
12
13 void PrintDics(int number)
14 {
15     if (number < 1)
16         return;
17
18     int* Probabilities[2];
19     Probabilities[0] = new int[maxNum * number + 1];
20     Probabilities[1] = new int[maxNum * number + 1];
21
22
23     for (int i = 0; i < maxNum*number+1; ++i)
24     {
25         Probabilities[0][i] = 0;
26         Probabilities[1][i] = 0;
27     }
28     int flag = 0;
29     for (int i = 1; i <= maxNum; ++i)
30         Probabilities[flag][i] = 1;
31
32
33     for (int k = 2; k <= number; ++k)
34     {
35         for (int i = 0; i < k; ++i)
36             Probabilities[1-flag][i] = 0;
37         for (int i = k; i <= maxNum*k; ++i)
38         {
39             Probabilities[1-flag][i] = 0;
40             for (int j = 1; j<=i&&j<=maxNum; ++j)
41                 Probabilities[1-flag][i] += Probabilities[flag][i-j];
42         }
43         flag = 1 - flag;
44     }
45
46     double total = pow((double)maxNum, number);
47     for (int i = number; i <= maxNum*number; ++i)
48     {
49         double ratio = (double)Probabilities[flag][i] / total;
50         printf("%d: %f\n", i, ratio);
51     }
52     delete[] Probabilities[0];
53     delete[] Probabilities[1];
54 }
55
56 int main()
57 {
58     int number = 5;
59     PrintDics(number);
60 }
时间: 2024-10-23 04:58:24

剑指Offer43 n个骰子点数概率的相关文章

剑指offer--43.连续子数组的最大和

最大子段和,最大能取所有 ---------------------------------------------------------------- 时间限制:1秒 空间限制:32768K 热度指数:211448 本题知识点: 数组 题目描述 HZ偶尔会拿些专业问题来忽悠那些非计算机专业的同学.今天测试组开完会后,他又发话了:在古老的一维模式识别中,常常需要计算连续子向量的最大和,当向量全为正数的时候,问题很好解决.但是,如果向量中包含负数,是否应该包含某个负数,并期望旁边的正数会弥补它呢

剑指offer (43) n个骰子的点数

题目:把n个骰子扔在地上,所有骰子朝上一面的点数之和为s,输入n,打印出s的所有可能的值出现的概率 int g_maxValue = 6; // ====================方法一==================== void Probability(int number, int* pProbabilities); void Probability(int original, int current, int sum, int* pProbabilities); void Pr

剑指Offer对答如流系列 - n个骰子的点数

面试题60:n个骰子的点数 题目描述 把n个骰子扔在地上,所有骰子朝上一面的点数之和为s.输入n,打印出s的所有可能的值出现的概率. 问题分析 这个问题需要点高中数学的知识. 对于n个骰子,要计算出每种点数和的概率,我们知道投掷n个骰子的总情况一共有6^n种,因此只需要计算出某点数和的情况一共有几种,即可求出该点数之和的概率. 思路一:递归暴力 我们知道点数之和s的最小值为n,最大值为6*n,因此考虑用一个大小为(6*n-n+1)的数组存放不同点数之和的情况个数,那么,如果点数之和为x,那么把它

《剑指offer》第六十题:n个骰子的点数

// 面试题60:n个骰子的点数 // 题目:把n个骰子扔在地上,所有骰子朝上一面的点数之和为s.输入n,打印出s // 的所有可能的值出现的概率. #include <cstdio> #include <math.h> int g_maxValue = 6; // ====================方法一==================== void Probability(int current, int sum, int* pProbabilities); void

《剑指offer》 面试题43 n个骰子的点数 (java)

引言:写这篇文章的初衷只是想做个笔记,因为这道题代码量有点大,有点抽象,而书上并没有详细的注释.为了加深印象和便于下次复习,做个记录. 原题:把n个骰子扔到地上,所有骰子朝上一面的点数之后为s. 输入n,打印出s所有可能的值出现的概率.(每个骰子6个面,点数从1到6) 解法一:基于递归,时间效率不高 递归的思想一般是分而治之,把n个骰子分为第一个和剩下的n-1个.先计算第一个骰子每个点数出现的次数,再计算剩余n-1个骰子出现的点数之和.求n-1个骰子的点数之的方法和前面讲的一样,即再次把n-1个

剑指Offer面试题43(Java版):n个骰子的点数

题目:把n个骰子仍在地上.全部骰子朝上一面的点数之和为s,输入n,打印出s的全部可能的值出现的概率. 解法一:基于递归求骰子的点数,时间效率不够高 如今我们考虑怎样统计每个点数出现的次数. 要向求出n个骰子的点数和.能够先把n个骰子分为两堆:第一堆仅仅有一个.还有一个有n-1个.单独的那一个有可能出现从1到6的点数. 我们须要计算从1到6的每一种点数和剩下的n-1个骰子来计算点数和. 接下来把剩下的n-1个骰子还是分成两堆,第一堆仅仅有一个.第二堆有n-2个. 我们把上一轮哪个单独骰子的点数和这

剑指 Offer 题目汇总索引

剑指 Offer 总目录:(共50道大题) 1. 赋值运算符函数(或应说复制拷贝函数问题) 2. 实现 Singleton 模式 (C#) 3.二维数组中的查找 4.替换空格               时间:O(n) 空间:O(1) 5.从尾到头打印链表 6. 重建二叉树          && 二叉树的各种遍历(BFS,DFS,DLR,LDR,LRD) 7.用两个栈实现队列 8.旋转数组的最小数字 9.斐波那契数列第 n 项        时间O(lgn) 10.一个整数的二进制表示中

剑指offer算法总结

剑指offer算法学习总结 节选剑指offer比较经典和巧妙的一些题目,以便复习使用.一部分题目给出了完整代码,一部分题目比较简单直接给出思路.但是不保证我说的思路都是正确的,个人对算法也不是特别在行,只不过这本书的算法多看了几遍多做了几遍多了点心得体会.于是想总结一下.如果有错误也希望能指出,谢谢. 具体代码可以参考我的GitHub仓库: https://github.com/h2pl/SwordToOffer 数论和数字规律 从1到n整数中1出现的次数 题目描述 求出1~13的整数中1出现的

金三银四,磨砺锋芒;剑指大厂,扬帆起航(最全Android开发工程师面试指南)

引言 元旦匆匆而过,2020年的春节又接踵而来,大家除了忙的提着裤子加班.年底冲冲冲外,还有着对于明年的迷茫和期待! 2019年有多少苦涩心酸,2020年就有更多幸福美好,加油,奥利给!怀着一颗积极向上的心,来面对未来每一天的挑战! 所谓"兵马未动,粮草先行",我们打响明天的战役也需要精神食粮来做后勤保障才是. 在此我整理了一份安卓开发面试指南,希望对磨砺锋芒.奋发向上的小伙伴有所帮助,祝你早日剑指大厂,扬帆起航,奥利给! Java基础 Java集合框架 Java集合--ArrayLi