#include <iostream>
#include <math.h>
using namespace std;
int g_max = 6;
void printProbability(int n)
{
if(n < 1)
return;
int* pProbabilities[2];
pProbabilities[0] = new int[g_max * n + 1];
pProbabilities[1] = new int[g_max * n + 1];
for(int i = 0;i < g_max * n + 1;++i)
{
pProbabilities[0][i] = 0;
pProbabilities[1][i] = 0;
}
int flag = 0;
for(int i = 1;i <= g_max;++i)
pProbabilities[flag][i] = 1;
for(int k = 2;k <= n;++k)
{
for(int i = 0;i < k;++i)
pProbabilities[1-flag][i] = 0;
for(int i = k;i <= g_max * k;++i)
{
pProbabilities[1 - flag][i] = 0;
for(int j = 1;j <= i && j <= g_max;++j)
pProbabilities[1 - flag][i] += pProbabilities[flag][i - j];
}
flag = 1 - flag;
}
double s ;
double total = pow((double)g_max,n);
for(int i = n;i <= g_max * n;++i)
{
double ratio = (double)pProbabilities[flag][i] / total;
cout << i << " " << ratio << endl;
s += ratio;
}
cout << "P:" << s << endl;
delete[] pProbabilities[0];
delete[] pProbabilities[1];
}
int main()
{
printProbability(3);
return 0;
}
上面程序是站上某个大老写的,我找不到了,侵权联系我,我马上删。
说明一下,这个程序运行效率很高,但是,当输入值过高,即printProbability的值过大,超多10几,输出值就溢出,导致数据错误,想问一下怎么解决。感谢