Skip to main content

FizzBuzz 問題

給一個整數 n 請列印出 1~n 的每一個整數, 但是

當整數可以被 3 整除的時候印出 Fizz 來代替原本要印出的數,

當整數可以被 5 整除的時候印出 Buzz 來代替原本要印出的數,

當整數可以被 3 跟 5 整除的時候印出 FizzBuzz 來代替原本原本要印出的數。

Example

比如 n = 15 , 就要印出 1 2 Fizz 4 Buzz Fizz 7 8 Fizz Buzz 11 Fizz 13 14 FizzBuzz

JavaScript 基本解法

const n = 50;

for(let i = 1; i <= n; i++){
if(i%5 === 0 && i%3 === 0){
console.log('FizzBuzz');
} else if(i%3 === 0){
console.log('Fizz');
} else if(i%5 === 0){
console.log('Buzz');
} else {
console.log(i)
}
}

那如果今天加上條件,可以整除 7 也做改變,可以整除 10 也做改變,這種寫法就會比較麻煩,因此有以下更好的解法:

const n = 50;

for(let i = 1; i <= n; i++){
let result = '';
if(i%3 === 0){
result += 'Fizz'
}
if(i%5 === 0){
result += 'Buzz'
}
if(i%7 === 0){
result += '777'
}
if(i%10 === 0){
result += '101010'
}
if(result.length >0){
console.log(result);
}
else {
console.log(i);
}
}

這樣寫的話,條件繼續增加,只需增加一組 if 就可以了。 這樣是不是輕鬆多了呢。 原理是用空的字串 result ,遇到條件就疊上去。

以下是 Java 解法

public class FizzBuzz {

static int n = 50;

public static void main(String[] args) {
for (int i = 1; i <= n; i++) {
String result = "";
if (i % 3 == 0) {
result += "Fizz";
}
if (i % 5 == 0) {
result += "Buzz";
}
if (i % 7 == 0) {
result += "777";
}
if (i % 10 == 0) {
result += "101010";
}
if (result.length() > 0) {
System.out.println(result);
} else {
System.out.println(i);
}
}
}

}

}

這題型不只在面試時會遇到,平常在寫程式遇到條件加上字串的情況,也可以善加利用此方法。

此文同時發布於鐵人賽