给你一个整数n. 从 1 到 n 按照下面的规则打印每个数:
- 如果这个数被3整除,打印
fizz
. - 如果这个数被5整除,打印
buzz
. - 如果这个数能同时被
3
和5
整除,打印fizz buzz
. -
样例
比如 n =
15
, 返回一个字符串数组:[ "1", "2", "fizz", "4", "buzz", "fizz", "7", "8", "fizz", "buzz", "11", "fizz", "13", "14", "fizz buzz" ]
挑战思路:将问题简化,对一个整数进行判断,输出正确的字符,先判断是否能被3和5整除,再判断是否能被3整除,再判断是否能被5整除,依次判断。代码如下Can you do it with only one
if
statement? vector<string> fizzBuzz(int n) { vector<string> results; for(int i=1;i<=n;i++) { if(i%5==0&&i%3==0) results.push_back("fizz buzz"); else if(i%5==0) results.push_back("buzz"); else if(i%3==0) results.push_back("fizz"); else results.push_back(to_string(i)); } return results; }
这种做法比较简单,但是在挑战要求里面,只能用一个if语句完成,但是要完成题目,最少需要4种状态才行,所以我使用switch语句完成算法,但是也不太符合。- 希望在评论中能得到各位的解答。
switch方法
vector<string> fizzBuzz(int n) {
vector<string> results;
for(int i=1;i<=n;i++){
int sum=0;
sum+=i%3==0 ? 1:2;
sum+=i%5==0 ? 2:4;
switch(sum){
case(3):
results.push_back("fizz buzz");
break;
case(5):
results.push_back("fizz");
break;
case(4):
results.push_back("buzz");
break;
default:
results.push_back(to_string(i));
}
}
return results;
}