『经济学家萨谬森问同事是否愿意赌一次掷硬币,可以赢二百美元或输一百美元。同事说:「我不会赌,因为我对输一百美元的担心比赢二百美元的期待更大。如果体让我连续赌一百次,我就愿意。」
为什麽人们会觉得只赌一次胜算不高,连续赌一百次就会对自己有利呢?这个问题不容易回答。没错,赌越多次,你赢的可能性越高;但是反过来想,当你赌越多次,你损失的金额也会越大。』
这是麦可‧路易斯所写的《橡皮擦计画》中的一个小故事。
那天睡前躺在床上,就想到可以想一个程序来掷硬币吗?
最先想到的就是捉取一个输入的数值来当作丢掷硬币的次数:
var inputNum = document.getElementById("countId").value;//将正面sideA与sideB的初始数值设为0
var sideA = 0;
var sideB = 0;
然後再将输入的数字inputNum的字串透过parseInt转为数字countNum,放入for回圈当条件。
至於switch中的参数 r,则是用Math.random() * 2,产生2以内的随机数,再用Math.ceil()无条件进位取整数,也就只会产生1与2两个数值,用1代表正面,2代表反面。
for (var i = 1; i <= countNum; i++) {
var r = Math.ceil(Math.random() * 2);
switch (r) {
case 1:
sideA++;
break;
case 2:
sideB++;
break;
default:
console.log("不是正面,也不是反面");
}
}
本来是用if…else…来写正面与反面的满足条件,但是後来发现只有正面(1)反面(2)两种状态的情境很适合switch的写法,所以改用效能更好的switch。
然後印出执行次数:
console.log("正面" + sideA + "次");
console.log("反面" + sideB + "次");
实做出来的掷硬币程序放在这里:
<<: 在软件开发项目中使用开源组件,最不关心的是测试覆盖率
>>: CLOUDWAYS虚拟主机限时首二月7折优惠码,只到2021/9/5
Hashicorp Vault: Audit log 启用audit log的设定不在设定档内,而是...
在前一章我们介绍完kind常用的指令,既然已经知道指令了,接下来我们就来试看看部署 建立环境 首先,...
什麽是伪元素(Pseudo Element)? 伪元素就如同它的名字一样,不是一个实际存在於网页里...
Update(01/10):EP approved! 在这边纪录一下这份 offer 的各个时程。...
1. 启动 SSH 服务 1.1 DSM **控制台** > **终端机 & SNMP...