网站管理系统模板,wordpress 不同分类 不同主题,渭南网站制作学校,编写app题目#xff1a;把n个骰子扔在地上#xff0c;所有骰子朝上一面的点数之和为s。输入n,打印出s的所有可能的值出现的概率。 分析:要解决这个问题#xff0c;我们需要先统计出每个点数出现的次数#xff0c;然后把每个点数出现的次数除以,就能求出每个点数出现的概率了。我们…题目把n个骰子扔在地上所有骰子朝上一面的点数之和为s。输入n,打印出s的所有可能的值出现的概率。 分析:要解决这个问题我们需要先统计出每个点数出现的次数然后把每个点数出现的次数除以,就能求出每个点数出现的概率了。我们可以用两个数组来存储骰子点数的每个总数出现的次数。在一轮循环中第一个数组中的第n个数字表示骰子和为n出现的次数在下一轮循环中我们加上一个新的骰子此时和为n的骰子出现的次数应该等于上一轮循环中骰子点数和为n-1、n-2、n-3、n-4、n-5、n-6的次数的总和。
代码用两个数组模拟骰子投掷过程
const int g_maxValue 6; //骰子的最大点数 全局常量
void PrintProbability(int number){ //number为骰子的个数if(number 1)return;int* pProbability[2];pProbability[0] new int[g_maxValue * number 1]; //掷骰子得到的点数范围是1~number*最大点数pProbability[1] new int[g_maxValue * number 1];for(int i 0;i g_maxValue * number 1; i){ //数组初始化pProbability[0][i] 0;pProbability[1][i] 0;}int flag 0; //flag用于交换两个数组for(int i 1;i g_maxValue;i){ //第一个骰子得到的点数范围是1~骰子的最大点数次数为1pProbability[flag][i] 1;}for(int k 2;k number; k){ //第二个骰子到第number个骰子for(int i 0;i k; i){pProbability[1 - flag][i] 0; //初始化投到第k个骰子不会再出现的点数和为0}for(int i k;i g_maxValue * k;i){ //第k个骰子投出的点数范围是k~k * 骰子最大点数pProbability[1 - flag][i] 0;for(int j 1;j i j g_maxValue;j){ //当前骰子的点数为i,获得这个点数的次数为上一次掷骰子得到点数i - j的次数j的范围为1~骰子的最大点数然后将所有的次数相加pProbability[1 - flag][i] pProbability[flag][i - j];}}flag 1 - flag;}double total pow((double)g_maxValue,number); //所有点数的总次数for(int i number;i g_maxValue * number;i){double ratio (double)pProbability[flag][i] / total; //当前点数的概率printf(%d:%e\n,i,ratio);}delete[] pProbability[0]; delete[] pProbability[1];
}