iT邦幫忙

1

上帝擲硬幣:猜猜正面還是反面

  • 分享至 

  • xImage
  •  

『經濟學家薩謬森問同事是否願意賭一次擲硬幣,可以贏二百美元或輸一百美元。同事說:「我不會賭,因為我對輸一百美元的擔心比贏二百美元的期待更大。如果體讓我連續賭一百次,我就願意。」

為什麼人們會覺得只賭一次勝算不高,連續賭一百次就會對自己有利呢?這個問題不容易回答。沒錯,賭越多次,你贏的可能性越高;但是反過來想,當你賭越多次,你損失的金額也會越大。』

這是麥可‧路易斯所寫的《橡皮擦計畫》中的一個小故事。

那天睡前躺在床上,就想到可以想一個程式來擲硬幣嗎?

最先想到的就是捉取一個輸入的數值來當作丟擲硬幣的次數:

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 + "次");

實做出來的擲硬幣程式放在這裡:


圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
海綿寶寶
iT邦大神 1 級 ‧ 2021-08-31 09:55:38

這個有很重要嗎
要重覆說三次
/images/emoticon/emoticon19.gif

popeye_ux iT邦新手 4 級 ‧ 2021-08-31 11:37:24 檢舉

不好意思!新手發文,沒注意到重複了!

我要留言

立即登入留言