面試題43—n個色子的點數
阿新 • • 發佈:2019-02-10
**題目:把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);
}