题目链接:
https://projecteuler.net/problem=389
题意:
\(T\)。
\(C\)。
\(O\)。
\(D\)。
\(I\)。
\(4\)位小数。
每个面出现的概率等价。
题解:
https://en.wikipedia.org/wiki/Variance
\(n\)边形的骰子,掷骰子得到的期望点数可以定义为离散随机变量。
\(Var(X) = \sum_{i=1}^{6}\frac{1}{6}(i-\frac{7}{2})^2 = \frac{35}{12}\)。
\(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}\)。
\(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;
}