iT邦幫忙

第 12 屆 iT 邦幫忙鐵人賽

DAY 5
1
Software Development

One Punch 一拳搞定前後端面試系列 第 5

[One Punch 一拳搞定前後端面試] DAY-05 - FizzBuzz

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);
			}
		}
		}

	}

}

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

此文同時發布於好讀版


上一篇
[One Punch 一拳搞定前後端面試] DAY-04 - 出現最多次
下一篇
[One Punch 一拳搞定前後端面試] DAY-06 - 陣列切割
系列文
One Punch 一拳搞定前後端面試30

尚未有邦友留言

立即登入留言