上帝掷硬币:猜猜正面还是反面

『经济学家萨谬森问同事是否愿意赌一次掷硬币,可以赢二百美元或输一百美元。同事说:「我不会赌,因为我对输一百美元的担心比赢二百美元的期待更大。如果体让我连续赌一百次,我就愿意。」

为什麽人们会觉得只赌一次胜算不高,连续赌一百次就会对自己有利呢?这个问题不容易回答。没错,赌越多次,你赢的可能性越高;但是反过来想,当你赌越多次,你损失的金额也会越大。』

这是麦可‧路易斯所写的《橡皮擦计画》中的一个小故事。

那天睡前躺在床上,就想到可以想一个程序来掷硬币吗?

最先想到的就是捉取一个输入的数值来当作丢掷硬币的次数:

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

Day 18. Hashicorp Vault: Audit log (1)

Hashicorp Vault: Audit log 启用audit log的设定不在设定档内,而是...

Day10-Kind部署环境与测试

在前一章我们介绍完kind常用的指令,既然已经知道指令了,接下来我们就来试看看部署 建立环境 首先,...

Day15 Pseudo Element 眼见不一定为真

什麽是伪元素(Pseudo Element)? 伪元素就如同它的名字一样,不是一个实际存在於网页里...

【Day31】新加坡工作後续的时程

Update(01/10):EP approved! 在这边纪录一下这份 offer 的各个时程。...

透过 SSH 登入 DSM

1. 启动 SSH 服务 1.1 DSM **控制台** > **终端机 & SNMP...