1. 程式人生 > >面試題43—n個色子的點數

面試題43—n個色子的點數

**題目:把n個色子扔在地上,所有色子朝上一面的點數之和為s。輸入n,打印出s的所有可能的值出現的概率。
程式碼示例:**


#include<iostream>
#include<cmath>
using namespace std;
const int maxvalue = 6;
void PrintNum(int num)
{
    if (num < 1)
        return;

    int *P[2];
    P[0] = new int[maxvalue*num + 1];
    P[1] = new int[maxvalue*num + 1
]; int flag = 0; for (int i = 0; i <= maxvalue*num; i++) { P[flag][i] = 0; P[1 - flag][i] = 0; } for (int i = 1; i <= maxvalue; i++) { P[flag][i] = 1; } for (int k = 2; k <= num; k++) { for (int i = 0; i <= maxvalue*num; i++) P[1
- flag][i] = 0; for (int i = k; i <= k*maxvalue; i++) { for (int j = 1; j<=i&&j <= maxvalue; j++) P[1 - flag][i] += P[flag][i - j]; } flag = 1-flag; } double total = pow(double(maxvalue), num); for (int i = num; i <= num*maxvalue; i++) { cout
<< "點數和為" << i << "的概率為:" << P[flag][i] << "/" << total << endl; } } int main() { int n = 5; PrintNum(n); }