C++实现N个骰子的点数算法
本文实例讲述了C++实现N个骰子的点数算法,分享给大家供大家参考之用。具体方法如下:
题目要求:把n个骰子仍在地上,所有点数
实现代码如下:
#include<iostream>
usingnamespacestd;
constintg_maxValue=6;
constintnumber=6;
intarray[(number-1)*g_maxValue+1];
voidprobility(intoriginal,intcurrent,intsum,int*array)
{
if(current==0)
{
array[sum-original]++;
return;
}
for(inti=1;i<=g_maxValue;i++)
{
probility(original,current-1,sum+i,array);
}
}
voidgenerateValue(int*array,intsize)
{
if(array==NULL||size<=0)
return;
for(inti=number;i<=number*g_maxValue;i++)
{
array[i-number]=0;
}
probility(number,number,0,array);
for(inti=0;i<(number-1)*g_maxValue+1;i++)
{
cout<<array[i]<<"";
}
}
voidmain()
{
generateValue(array,(number-1)*g_maxValue+1);
}
采用循环解法,和上述代码本质一样,但是略有不同。
具体实现代码如下:
#include<iostream>
usingnamespacestd;
voidPrintProbability(intnumber)
{
constintg_maxValue=6;
int*array[2];
for(inti=0;i<2;i++)
{
array[i]=newint[g_maxValue*number];
}
for(inti=0;i<g_maxValue*number;i++)
{
array[0][i]=0;
array[1][i]=0;
}
intflag=0;
for(inti=0;i<g_maxValue;i++)
{
array[flag][i]=1;
}
for(inti=1;i<number;i++)
{
for(intj=0;j<i;j++)
array[1-flag][j]=0;
for(intj=i;j<(i+1)*g_maxValue;j++)
{
array[1-flag][j]=0;
for(intk=1;k<=j&&k<=g_maxValue;k++)
array[1-flag][j]+=array[flag][j-k];
}
flag=1-flag;
}
for(inti=number-1;i<g_maxValue*number;i++)
{
cout<<array[flag][i]<<"";
}
}
voidmain()
{
PrintProbability(2);
}
希望本文所述对大家C++程序算法设计的学习有所帮助。