在上一篇的 Think first, code later 中,有提到如何一步一步地解開印出 1-100 的偶數,這一篇則是來看看如何解一些題目,像是印出 1-100 的奇數、fizz buzz 跟找出最小值。

印出 1-100 的奇數


首先先想出步驟:

1
2
3
4
5
設定 i = 1
如果 i > 100 就結束
如果 i 是奇數就印出 i
讓 i 累加
再跳回第 2 步

大概設定步驟後,就可以寫出 pseudo code:

1
2
3
4
5
let i = 1
i > 100 end
i % 2 === 1
i ++
jump to line 2

寫到這邊就大概知道可以使用 for 迴圈去跑了,所以可以寫成:

1
2
3
4
5
for (let i = 1; i < 100; i++ ) {
if (i % 2 ===1) {
console.log(i)
}
}

Fizz buzz


記得這題在 leetcode 有看過,那時候還不是很懂如何思考(雖然現在也沒有很強就是了),不過現在可以來試試看如何解出這一題,首先先了解一下規則。

Fizz buzz 的規則是,數字從 1-n,如果碰到 3 的倍數,就印出 Fizz;如果碰到 5 的倍數,就印出 Buzz;如果碰到 3 跟 5 的倍數,就印出 Fizz Buzz。

知道規則後,就可以想想怎麼做:

1
2
3
4
5
6
7
設定 i = 1
一直算到 n 就結束
如果是 3 的倍數,印 Fizz
如果是 5 的倍數,印 Buzz
如果是 3 跟 5 的倍數,印 Fizz Buzz
讓 i 累加
跳回第 2 步

到這邊就可以用 function 包一個 for 迴圈寫出來,看數字要多少再帶入就可以:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
function fizzBuzz (num) {
for (let i =1; i <= num; i++) {
if(i % 15 ===0) { // 15 的倍數就印 Fizz Buzz
console.log('Fizz Buzz')
} else if (i % 3 ===0) { // 3 的倍數就印 Fizz
console.log('Fizz')
} else if (i % 5 ===0) { // 5 的倍數就印 Buzz
console.log('Buzz')
} else { // 其他數就照樣印出數字
console.log(i)
}
}
}

fizzBuzz(100) // 代入 100,就從 1 比對到 100

找最小值


找最小值的方法可以從情境去帶入比較好思考。

例如目前有一副牌,從第一張開始設定為最小的牌,再來每一次的翻牌跟目前最小的牌做比較,直到全部翻完就可以知道最小的牌是哪一張。

所以 pseudo code 大概是這樣:

1
2
3
4
5
6
7
let min = [0];
for (i form 1 to n) do
翻開第 i 張牌
if (第 i 張牌比最小牌還要小)
最小的牌 = 第 i 張牌
end if
end for

接著就可以用 JavaScript 寫出 code:

1
2
3
4
5
6
7
8
9
10
let num = [11, 10, 8, 3, 2, 6];          // 目前的牌組
let min = num[0]; // 設定最小牌為第一張

for (let i = 0; i < num.length; i ++) {
if (num[i] < min) { // 如果目前翻到的牌 < min,
min = num[i] // min就是目前最小牌
}
}

console.log(min) // 最小值就是 2