问题描述:给你一个整数n. 从 1 到 n 按照下面的规则打印每个数:
- 如果这个数被3整除,打印
fizz
. - 如果这个数被5整除,打印
buzz
. - 如果这个数能同时被
3
和5
整除,打印fizz buzz
. - 如果这个数既不能被
3
整除也不能被5
整除,打印数字本身。
问题说明:只使用一个if语句。
问题分析:这道题本身不难,但要只使用一个if语句就有点难度了。参考了一些其他人写的代码,大部分是用C++或者python实现的,有的甚至只有一句话,非常厉害。作为一个前端菜鸟,我就结合自己的理解,用JS实现了一种方法,欢迎指正~
大致思路是这样的:首先循环将1~n赋值进一个数组,注意,题目要求的是字符串数组,所以数字还要用 toString() 方法转换一下类型。因为只能使用一个if语句,那么3的倍数就不能作为条件放到if语句里了,我们需要再次将1~n的数组遍历一遍,并把其中3的倍数直接替换成“fizz”。最后我们再遍历一遍数组,使用if语句,把其中既是3的倍数也是5的倍数的值换成“fizz buzz”,把只是5的倍数换成“buzz”。
代码实现:
const fizzBuzz = function (n) {
var arr = [];
//生成1~n的字符串数组
for(var i=1;i<=n;i++){
arr.push(i.toString());
}
//把其中所有3的倍数赋值为“fizz”
for(var j=1;(j*3)<=n;j++){
arr[j*3-1] = "fizz";
}
//把5的倍数赋值为buzz,其中15的倍数赋值为fizz buzz
for(var k=1;(k*5)<=n;k++){
if(k*5%3==0){
arr[k*5-1] = arr[k*5-1] + " " + "buzz";
}else{
arr[k*5-1] = "buzz";
}
}
return arr;
}