起因
闲的无聊想到了这个问题,于是就发了一个沸点,网友们也展开了激烈的讨论,所以我决定好好研究研究这个问题。
思考
关于输出问题,大部分网友都觉得,排除各类看脸问题,输出是一样的,经过我的大量计算......
作为程序员计算是不可能计算的
先算两把武器的输出
于是设计了以下代码
let aa = 0;
let bb = 0;
let cc = 0;
for (let i = 0; i < 10000; i++) {
let a = 0;
let b = 0;
for (let i = 0; i < 10000; i++) {
a += Math.floor(Math.random() * 3) + 2;
b += Math.floor(Math.random() * 5) + 1;
}
a > b ? aa++ : a < b ? bb++ : cc++;
}
console.log(aa); // 4997
console.log(bb); // 4980
console.log(cc); // 23
用两把武器对着同一个目标砍一万下,然后对比两把武器的总输出量,一共砍了一万回合,突出一个有来有回。看来大部分的网友的观点是正确,这两把武器的输出量相当
有一个其他想法
如果怪物的血量只有2,那么显然2-4的武器一刀一个,强的可怕。1-5的武器怎么可能可以媲美呢?
于是引入了怪物血量这个变量再次进行如下编码
const MONSTER_LIFE = 1;
const ATTACK_COUNT = 10000;
const PK_COUNT = 10000;
let winA = 0;
let winB = 0;
let tie = 0;
for (let i = 0; i < PK_COUNT; i++) {
let aCount = 0;
let bCount = 0;
let lifeA = MONSTER_LIFE;
let lifeB = MONSTER_LIFE;
for (let i = 0; i < ATTACK_COUNT; i++) {
lifeA -= Math.floor(Math.random() * 3) + 2;
if (lifeA <= 0) {
aCount++;
lifeA = MONSTER_LIFE;
}
lifeB -= Math.floor(Math.random() * 5) + 1;
if (lifeB <= 0) {
bCount++;
lifeB = MONSTER_LIFE;
}
}
aCount > bCount ? winA++ : aCount < bCount ? winB++ : tie++;
}
console.log(winA);
console.log(winB);
console.log(tie);
以怪物血量为变量,各自砍一万刀,比拼砍杀怪物量,然后再PK一万回合,自然就知道哪把武器更强了
经过代码运行获得以下表格
| 怪物血量 | 2-4 胜利 | 1-5 胜利 | 平局 |
|---|---|---|---|
| 0 | 0 | 0 | 10000 |
| 1 | 0 | 0 | 10000 |
| 2 | 10000 | 0 | 0 |
| 3 | 10000 | 0 | 0 |
| 4 | 10000 | 0 | 0 |
| 5 | 5 | 9995 | 0 |
| 6 | 10000 | 0 | 0 |
| 7 | 10000 | 0 | 0 |
| 8 | 9999 | 1 | 0 |
| 9 | 9968 | 27 | 5 |
| 10 | 10000 | 0 | 0 |
| 11 | 9995 | 4 | 1 |
| 12 | 9988 | 10 | 2 |
| 13 | 9965 | 25 | 10 |
| 14 | 9968 | 27 | 5 |
| 15 | 9916 | 60 | 24 |
| 20 | 9669 | 247 | 84 |
| 30 | 8824 | 853 | 323 |
| 40 | 8034 | 1327 | 639 |
| 50 | 7386 | 1731 | 883 |
| 100 | 5281 | 2471 | 2248 |
| 1000 | 2102 | 2525 | 5373 |
| 10000 | 2541 | 2450 | 5009 |
通过上表可知,除了怪物为5滴血的时候1-5的武器胜率高的出奇,其他大部分血量都是2-4的武器比较厉害。但随着怪物血量的上升,两把武器又无限趋近于相同。
经过多次运行8、9滴血的时候2-4也不是碾压性胜利,但7、10滴血2-4的武器都是碾压性胜利的,有没有大佬解释一下。
结论
求稳选2-4就对了。