n个骰子扔在地上,所有骰子朝上一面的点数之和为S。输入n,打印出S的所有可能的值出现的概率。
#include<iostream>
#include<math.h>
using namespace std;
int f[2][100];
int N;
int sum;
int dallor;
void compute_f()
{
sum=N*dallor;
for(int i=0;i<100;i++)
for(int j=0;j<100;j++)
f[i%2][j]=0;
for(int i=1;i<=dallor;i++)
{
f[1][i]=1;
}
for(int i=2;i<=N;i++)
{
for(int j=1;j<=sum;j++)
{
f[i%2][j]=0;
for(int k=1;k<=dallor;k++)
{
if(j>k)
{
f[i%2][j]+=f[(i-1)%2][j-k];
}
}
cout<<"f["<<i<<"]["<<j<<"]="<<f[i%2][j]<<endl;
}
}
long total=1;
for(int i=1;i<=N;i++)
{
total*=dallor;
}
for(int j=N;j<=sum;j++)
{
cout<<j<<" "<<(double)(f[N%2][j]/double(total))<<endl;
}
}
int main()
{
N=10;
dallor=6;
compute_f();
}