求编写多面骰子多次投掷结果百分比计算函数
骰子点数概率计算函数(百分比形式)
实现思路
通过动态规划统计每种点数和的组合数量,再用该数量除以总可能组合数(面数的投掷次数次方),最终转换为百分比结果。
JavaScript 实现代码
function calculateDiceProbability(sides, rolls) { // 初始化:0次投掷时仅存在0点,组合数为1 let prevCounts = { 0: 1 }; for (let roll = 0; roll < rolls; roll++) { const currentCounts = {}; // 遍历上一轮所有点数及对应组合数 for (const [sum, count] of Object.entries(prevCounts)) { const currentSum = parseInt(sum); // 遍历当前骰子的所有面 for (let face = 1; face <= sides; face++) { const newSum = currentSum + face; // 累加对应点数的组合数 currentCounts[newSum] = (currentCounts[newSum] || 0) + count; } } prevCounts = currentCounts; } // 计算总可能组合数 const totalCombinations = Math.pow(sides, rolls); // 转换为百分比格式,保留两位小数 const probabilityPercentages = {}; for (const [sum, count] of Object.entries(prevCounts)) { const percentage = ((count / totalCombinations) * 100).toFixed(2); probabilityPercentages[sum] = `${percentage}%`; } return probabilityPercentages; } // 使用示例 console.log(calculateDiceProbability(6, 2)); // 输出示例:{ '2': '2.78%', '3': '5.56%', '4': '8.33%', ..., '12': '2.78%' }
代码说明
- 动态规划初始化:
prevCounts起始记录0次投掷的状态,仅包含0点且组合数为1。 - 迭代统计组合数:每完成一轮投掷,基于上一轮的点数组合数据,累加当前骰子每个面带来的新点数组合数。
- 百分比转换:将每种点数的组合数除以总组合数,乘以100后保留两位小数,最终格式化为带百分号的字符串。
内容的提问来源于stack exchange,提问作者ixNoah
相关产品推荐
相关产品推荐

