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++程序算法设计的学习有所帮助。