You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求编写多面骰子多次投掷结果百分比计算函数

骰子点数概率计算函数(百分比形式)

实现思路

通过动态规划统计每种点数和的组合数量,再用该数量除以总可能组合数(面数的投掷次数次方),最终转换为百分比结果。

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 01:25:13