#include "stdafx.h" #include <string.h> // 这是一个掷色子的程序. // 假设有六个色子同时掷出,求各个色子数值之和的概率 // 六个色子之和最小是6,最大是36。 // 可以分配一个容量为31的数组Sum[31],用来存放每个求和出现的次数。 // 6出现的次数应该存放在Sum[0]中,36出现的次数应该存放在Sum[30]中。 void Sum(int nSieves, int nTotalSieves, int summary, int* result) { if(nSieves == 0) { result[summary - nTotalSieves] ++; return; } else { for(int index = 1; index <= 6; index++) { summary += index; nSieves --; Sum(nSieves, nTotalSieves, summary, result); nSieves++; summary -= index; } } } void ThrowSieves(int n) { if(n <= 0) { return; } else { int nMinSum = 1*n, nMaxSum = 6*n, size = nMaxSum - nMinSum + 1; int* result = new int[nMaxSum - nMinSum + 1]; memset(result, 0, size*sizeof(int)); int summary = 0; Sum(n, n, summary, result); int nTotal = 0, index = 0; for(index = 0; index < size; index++) { nTotal += result[index]; } for(index = 0; index < size; index++) { printf("Sum=%d, Percentage=%lf\n", index+n, (double)result[index]/(double)nTotal); } delete[] result; } } int _tmain(int argc, _TCHAR* argv[]) { ThrowSieves(1); char exit; scanf_s("%c", &exit); return 0; }
把n个色子扔在地上,所有色子朝上一面的点数之和为s。输入n,打印出s的所有可能的值出现的概率。,布布扣,bubuko.com
把n个色子扔在地上,所有色子朝上一面的点数之和为s。输入n,打印出s的所有可能的值出现的概率。
原文:http://www.cnblogs.com/bsqdevspace/p/3679421.html