Fizz Buzz
Fizz buzz是一個教小朋友的數學的團隊遊戲,遊戲的進行是小朋友依序報數,當他報的數是3的倍數時喊出"fizz",是5的倍數時喊出"buzz",同時是3也是5的倍數時喊出"Fizz buzz"。
Fizz buzz現在也用來作為企業徵才時的一項題目。
例子
報數喊出的順序如下:
1
, 2
, Fizz
, 4
, Buzz
, Fizz
, 7
, 8
, Fizz
, Buzz
, 11
, Fizz
, 13
, 14
, Fizz Buzz
, 16
, 17
, Fizz
, 19
, Buzz
, Fizz
, 22
, 23
, Fizz
, Buzz
, 26
, Fizz
, 28
, 29
, Fizz Buzz
, 31
, 32
, Fizz
, 34
, Buzz
, Fizz
, ...
模數運算子(Modulus Operator)
模數運算子(Modulus Operator, %
)是解題的關鍵,回傳整數除法的餘數:
Division | Division Result | Modulus | Modulus Result |
---|---|---|---|
1/3 | 0 with a remainder of 3 | 1 % 3 | 1 |
5/3 | 1 with a remainder of 2 | 5 % 3 | 2 |
16/3 | 5 with a remainder of 1 | 16 % 3 | 1 |
通常要判斷一整數為奇數還是偶數也是用模數運算子(Modulus Operator, %
):
Modulus | Result | Swift Code | Swift Code Result | Comment |
---|---|---|---|---|
6 % 2 | 0 | let isEven = (number % 2 == 0) |
true |
If a number is divisible by 2 it is even |
5 % 2 | 1 | let isOdd = (number % 2 != 0) |
true |
If a number is not divisible by 2 it is odd |
解題
以模數運算子(Modulus Operator, %
)解題
以整數除以3的餘數來判斷:
Modulus | Modulus Result | Swift Code | Swift Code Result |
---|---|---|---|
1 % 3 | 1 | 1 % 3 == 0 |
false |
2 % 3 | 2 | 2 % 3 == 0 |
false |
3 % 3 | 0 | 3 % 3 == 0 |
true |
4 % 3 | 1 | 4 % 3 == 0 |
false |
以整數除以5的餘數來判斷:
Modulus | Modulus Result | Swift Code | Swift Code Result |
---|---|---|---|
1 % 5 | 1 | 1 % 5 == 0 |
false |
2 % 5 | 2 | 2 % 5 == 0 |
false |
3 % 5 | 3 | 3 % 5 == 0 |
false |
4 % 5 | 4 | 4 % 5 == 0 |
false |
5 % 5 | 0 | 5 % 5 == 0 |
true |
6 % 5 | 1 | 6 % 5 == 0 |
false |
實作
Swift程式碼實作如下:
func fizzBuzz(numberOfTurns: Int) {
var result = ""
for i in 1...numberOfTurns {
var fizzBuzz : String = ""
if i % 3 == 0 {
fizzBuzz += "Fizz\t\t"
}
if i % 5 == 0 {
fizzBuzz += (result.isEmpty ? "" : " ") + "Buzz\t"
}
if fizzBuzz.isEmpty {
fizzBuzz += "\(i)\t"
}
result += fizzBuzz
}
print(result)
}
fizzBuzz(15)
輸出:
1, 2, Fizz, 4, Buzz, Fizz, 7, 8, Fizz, Buzz, 11, Fizz, 13, 14, Fizz Buzz