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);
}
}
}
}
}
這題型不只在面試時會遇到,平常在寫程式遇到條件加上字串的情況,也可以善加利用此方法。
此文同時發布於鐵人賽。