[cpp] DiceCoin
Viewer
- using namespace std;
- #include <iostream>
- #include <cmath>
- const double p = 0.308;
- int choose(int n, int k);
- double dbinom(int k, int n, double p);
- double PD(int D);
- double PND(int N, int D);
- double PN(int N);
- double EX();
- double PDN(int D, int N);
- double EY();
- double PNnD(int N, int D);
- double END();
- int main(int argc, char const *argv[])
- {
- double E_X = EX();
- cout << "E[X] = " << E_X << endl;
- cout << endl;
- double E_Y = EY();
- cout << "E[Y] = " << E_Y << endl;
- cout << endl;
- double E_ND = END();
- cout << "E[ND] = " << E_ND << endl;
- cout << endl;
- return 0;
- }
- int choose(int n, int k)
- {
- if (n < k)
- return 0;
- if (n == k || k == 0)
- return 1;
- return choose(n - 1, k) + choose(n - 1, k - 1);
- }
- double dbinom(int k, int n, double p)
- {
- return choose(n, k) * pow(p, k) * pow(1 - p, n - k);
- }
- double PD(int D)
- {
- if (D >= 1 && D <= 12)
- return 1.0 / 12.0;
- return 0;
- }
- double PND(int N, int D)
- {
- return dbinom(N, D, p);
- }
- double PN(int N)
- {
- double sum = 0;
- for (int D = N; D <= 12; D++)
- {
- sum += PND(N, D) * PD(D);
- }
- return sum;
- }
- double EX()
- {
- double sum = 0;
- cout << "P(N)s: ";
- for (int N = 0; N <= 12; N++)
- {
- double P = PN(N);
- cout << P << ", ";
- sum += N * P;
- }
- cout << "\b\b " << endl;
- return sum;
- }
- double PDN(int D, int N)
- {
- return PND(N, D) * PD(D) / PN(N);
- }
- double EY()
- {
- double sum = 0;
- cout << "P(D|N=6)s: ";
- for (int D = 1; D <= 12; D++)
- {
- double P = PDN(D, 6);
- cout << P << ", ";
- sum += D * P;
- }
- cout << "\b\b " << endl;
- return sum;
- }
- double PNnD(int N, int D)
- {
- return PD(D) * PND(N, D);
- }
- double END()
- {
- double sum = 0;
- cout << "P(NnD)s: ";
- for (int D = 1; D <= 12; D++)
- {
- for (int N = 0; N <= 12; N++)
- {
- double P = PNnD(N, D);
- cout << P << ", ";
- sum += N * D * P;
- }
- }
- cout << "\b\b " << endl;
- return sum;
- }
Editor
You can edit this paste and save as new: