摘要:FizzBuzzWhizz游戏、二进制的应用、 应用语言JavaScript
问题:输入num,分为如下几种情况:
- 若num%3=0,输出Fizz;
- 若num%5=0,输出Buzz;
- 若num%7=0,输出Whizz;
- 若输入为3和5、5和7、3和7、3和5和7的公倍数,则对应输出相加;
- 若是其他情况,则输出与输入相同。
思路:
先判断是否为3and5and7的公倍数,若不是接着判断,为3and5、3and7、5and7的公倍数,若不是则接着判断是否为3、5、7的倍数······这样做if(){}else(){}语句太多。
所以想到了一个办法,如下:
输出情况无非是8种,我们把它装到一个数组里
var FBW = new Array('','Whizz','Buzz','BuzzWhizz','Fizz',
'FizzWhizz','FizzBuzz','FizzBuzzWhizz');PS:位置不是乱放的,是与二进制数对应的
我们先设置一个长度为3的数组Array,初值全部为0
var str = new Array('0','0','0');若能同时被3、5、7整除则数组Array全部赋值为’1’,
if(n%3 == 0) str[0] = '1';
if(n%5 == 0) str[1] = '1';
if(n%7 == 0) str[2] = '1';返回一个字符串:
return str[0]+str[1]+str[2];就拿num = 3*5*7 举例子,能够得到一个字符串'111',然后把它转为10进制,得到数字7,然后在对应数组FBW[7]得FizzBuzzWhizz
已下是对应表:
| 3 | 5 | 7 |
|---|---|---|
| 0 | 0 | 0 |
| 0 | 0 | 1 |
| 0 | 1 | 0 |
| 0 | 1 | 1 |
| 1 | 0 | 0 |
| 1 | 0 | 1 |
| 1 | 1 | 0 |
| 1 | 1 | 1 |
代码:
var FBW = new Array('','Whizz','Buzz','BuzzWhizz','Fizz',
'FizzWhizz','FizzBuzz','FizzBuzzWhizz');
function mod(n){
var str = new Array('0','0','0');
if(n%3 == 0) str[0] = '1';
if(n%5 == 0) str[1] = '1';
if(n%7 == 0) str[2] = '1';
return str[0]+str[1]+str[2];
}
function test(n){
var i = mod(n)
if(i == '000')
document.write(n);
else
document.write(FBW[parseInt(i,2)]+'</br>')
}
test(105)
test(3)
test(7)
test(5)
test(7*5)
test(28)
test(3*7)
test(2)版权声明:本文为robtomb原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。