查看: 666|回复: 1

[交流讨论] 【JS应用题第三弹】计算期望值

[复制链接]

21

主题

12

金币

2946

贝壳

旅行者

Rank: 1

积分
398

明灯云会员

发表于 2024-3-27 22:55:59 | 显示全部楼层 |阅读模式
本帖最后由 康娜酱 于 2024-3-28 10:09 编辑

情境:
一个技能,第一次必定打出,然后有66%会再打出下一次,34%中断
如果没中断就一直66% VS 34%下去,然后一共最多可以打出7次(第一次+另外六次)
计算打出次数的期望值。

  1. var cb = 6; // 最多可以打出多少次(第一次不计入)
  2. var pr = 0.66; // 概率

  3. var arr = [];
  4. for (var i = 0; i <= cb; ++i) {
  5.   arr.push(Math.pow(pr, i) * (i === cb ? 1 : 1 - pr));
  6. }

  7. var ex = 0;
  8. for (var i = 0; i <= cb; ++i) {
  9.   ex += (1 + i) * arr[i]
  10. }

  11. return ex;
复制代码


打出1+0次的概率 = 0.34 = 34%
打出1+1次的概率 = 0.66 * 0.34 = 22.44%
打出1+2次的概率 = 0.66 ^ 2 * 0.34 = 14.8104%
打出1+3次的概率 = 0.66 ^ 3 * 0.34 = 9.774864%
打出1+4次的概率 = 0.66 ^ 4 * 0.34 = 6.45141024%
打出1+5次的概率 = 0.66 ^ 5 * 0.34 = 4.2579307584%
打出1+6次的概率 = 0.66 ^ 6 = 8.2653950016%

先创建一个arr空数组[],然后用for循环往里面push入Math.pow(pr, i) * (i === ds ? 1 : 1 - pr)
即是当for循环到i的值为0时,push入0.66^0*0.34等同打出1+0次的概率(34%)
而比如for循环到i的值为2时,push入0.66^2*0.34等同打出1+2次的概率(14.8104%)
到最后for循环到i的值为6时,push入0.66^6*1等同打出1+6次的概率(8.2653950016%)

for循环push完之后, 数组arr得出[0.34, 0.2244, 0.148104, 0.09774864, 0.0645141024, 0.042579307584, 0.082653950016]
可以开始计算期望值了,首先把ex赋值为0,然后又再用for循环把ex加上"打出的次数 * 数组arr中打出该次数的概率"
即是代入期望值公式1 * 0.34 + 2 * 0.2244 + 3 * 0.148104 + 4 * 0.09774864 + 5 * 0.0645141024 + 6 * 0.042579307584 + 7 * 0.082653950016 = 2.7807305676159997


最后咱们就得出了期望值约是2.78啦~


回复

使用道具 举报

21

主题

12

金币

2946

贝壳

旅行者

Rank: 1

积分
398

明灯云会员

 楼主| 发表于 2024-3-28 00:07:29 | 显示全部楼层
本帖最后由 康娜酱 于 2024-3-28 10:08 编辑

用宝可梦游戏中的三连踢招式作例子
三连踢.png
https://wiki.52poke.com/wiki/%E4%B8%89%E8%BF%9E%E8%B8%A2%EF%BC%88%E6%8B%9B%E5%BC%8F%EF%BC%89
  1. var cb = 3;    // 三连踢所以是3
  2. var pr = 0.9; // 三连踢的命中是90

  3. var arr = [];
  4. for (var i = 0; i <= cb; ++i) {
  5.   arr.push(Math.pow(pr, i) * (i === cb ? 1 : 1 - pr));
  6. }

  7. var ex = 0;
  8. for (var i = 0; i <= cb; ++i) {
  9.   // 计算每一踢的威力
  10.   let power = 0;
  11.   for (var j = 0; j <= i; ++j) {
  12.     power += 10 * j;
  13.   }
  14.   ex += power * arr[i]
  15. }

  16. return ex; // 得出47.07跟图片中显示的期望威力相同
复制代码


回复

使用道具 举报

*滑块验证:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表