题目链接:

https://projecteuler.net/problem=389

题意:

掷一个正四面体骰子,记点数为\(T\)。

掷\(T\)个正六面体骰子,记点数和为\(C\)。

掷\(C\)个正八面体骰子,记点数和为\(O\)。

掷\(O\)个正十二面体骰子,记点数和为\(D\)。

掷\(D\)个正二十面体骰子,记点数和为\(I\)。

求\(I\)的方差,并将你的答案四舍五入到\(4\)位小数。

每个面出现的概率等价。

题解:

可能我学了假的概率论和统计方法...以前不知道Bienaymé formula...可能学了也忘了...不过我们可以查 Wiki...QAQ... https://en.wikipedia.org/wiki/Variance

纵所周知,正\(n\)边形的骰子,掷骰子得到的期望点数可以定义为离散随机变量。

比如六面的骰子,每个面\(1\)~\(6\),每个面出现的概率等价。那么期望点数 \(X = \frac{(1 + 2 + 3 + 4 + 5 + 6)}{6} =\frac{7}{2}\)。期望的方差就是 \(Var(X) = \sum_{i=1}^{6}\frac{1}{6}(i-\frac{7}{2})^2 = \frac{35}{12}\)。

拓展一下,对于正\(n\)边形的骰子,每个面\(1\)~\(n\),期望点数\(X\)就是\(X = \frac{1}{n}\sum_{i=1}^{n}i = \frac{n+1}{2}\)。

期望方差就是 \(Var(X) = E(X^2) - (E(X)^2) = \frac{1}{n}\sum_{i=1}^{n}i - (\frac{1}{n}\sum_{i=1}^{n}i)^2 = \frac{(n+1)(2n+1)}{6} -(\frac{n+1}{2})^2 = \frac{n^2 - 1}{12}\)。

最后根据 the Law of Total Variance,即 \(Var(I) = Var(E(I|D)) + E(Var(I|D))] = Var(D)E(d)E(d) +Var(d) E(D)\) 就可以做出来啦。

代码:

#include <bits/stdc++.h>
using namespace std;
typedef long long ll; int dice[5] = {4,6,8,12,20}; //https://en.wikipedia.org/wiki/Variance double E(int n)
{
return (n + 1) / 2.0;
}
double Var(int n)
{
return (n * n - 1) / 12.0;
} int main(int argc, char const *argv[]) {
double e = 0.0 , var = 0.0;
double ed = 1.0, varsum = 0;
for(int i = 0; i < 5; i++) {
e = E(dice[i]);
var = Var(dice[i]);
varsum = varsum * e * e + var * ed;
ed = ed * e;
}
printf("%.4f\n", varsum);
cerr << "Time elapsed: " << 1.0 * clock() / CLOCKS_PER_SEC << " s.\n";
return 0;
}

最新文章

  1. 使用Microsoft的IoC框架:Unity来对.NET应用进行解耦
  2. ajax表单提交
  3. 文本深度表示模型Word2Vec
  4. c# 注册全局热键
  5. js的一些压缩和优化性能
  6. c语言_判断例子
  7. 1、WWDC2014 详解OSX/iOS8/Swift语言
  8. Java基础知识强化之IO流笔记62:三种方式实现键盘录入
  9. 如何实现室内Wi-Fi无线终端的精准定位
  10. linux环境下搭建环境发布web项目
  11. 针对Chrome谷歌等浏览器不再支持showModalDialog的解决方案
  12. C语言之可变参实现scanf函数
  13. drf相关问题
  14. 微信小程序中使用 &lt;web-view&gt; 内嵌 H5 时,登录问题的处理方法
  15. hdu3709 数位dp
  16. encodeURIComponent编码与解码
  17. 使用动态跟踪技术SystemTap监控MySQL、Oracle性能
  18. zabbix自动发现与监控内存和CPU使用率最高的进程,监测路由器
  19. wordpress 下载主题模板、更新报错 No working transports found解决办法
  20. python之函数用法setattr(),了解即可

热门文章

  1. 洛谷P1200 [USACO1.1]你的飞碟在这儿
  2. ireport 追加新报表
  3. Ajax学习总结(1)——Ajax实例讲解与技术原理
  4. CCF模拟题 最大的矩形
  5. 单向链表 golang
  6. Eclipse+PyDev解决中文输入和注释问题
  7. Http协议简介【转】
  8. js call 和 apply
  9. OpenCV —— 视频播放控制
  10. Laravel输出sql语句