FizzBuzzWhizz

作者: cwxyz | 来源:发表于2017-03-27 14:27 被阅读131次

本篇仅讨论此题目,若需查看与 javascript 相关信息,请查看本人另一篇文章 javascript 基础入门

题目

FizzBuzzWhizz 需求:

when run(3) return 'Fizz'
when run(5) return 'Buzz'
when run(7) return 'Whizz'
when run(3 * 5) return 'FizzBuzz' //run 的参数为 3 和 5 共同的倍数
when run(3 * 7) return 'FizzWhizz' //run 的参数为 3 和 7 共同的倍数
when run(5 * 7) return 'BuzzWhizz' //run 的参数为 5 和 7 共同的倍数
when run(3 * 5 * 7) return 'FizzBuzzWhizz' //run 的参数为 3、5 和 7 共同的倍数


> 其余情况:
`when run(n) return n   // n 可以为 非 3、5、 7或3、5、7的倍数的数字 `
如:`run(2) return '2'`

> 作业要求:
1.通过 `document.write()` 方法,将以上需求的每一条调用结果打印出来,结果会在屏幕右边显示
2.为每一条需求写一个测试

## 分析 & 解决:

> 题目中没有给出前三列参数的描述,那我默认前三列的参数分别表示:仅为 3 的倍数,仅为 5 的倍数,仅为 7 的倍数。

那么根据题目要求,一共有八种情况。最简单的想法,写七个 `if ... eles ...` ,肯定能解决问题。
虽然这样就能解决问题,但是我们不妨再深入的分析一下题目,题目的需求是返回一个字符串,那么 run 函数就可以设计成 `run( num ) : string` 这样,只要根据传入的数字返回对应的字符串,那么此题就算完成需求。那么根据题目前七个需求,我们不妨把题目稍微修改一下说法:

1.  给你一个空字符串,只要能被三整除,那么字符串就加上 'Fizz' 
2. 只要能被五整除,那么字符串再加上 'Buzz' 
3. 只要能被七整除,那么字符串再加上 'Whizz'
4. 如果不满足上述任何一个需求,那么字符串就变为的数字

这样的话,就只需要写三个 `if` 语句,然后调整字符串的值,最后再判断一次字符串是否为空。若为空,那么就直接返回参数。

## 总结:

> 这样的话,题目的需求也算是完成了,我们不妨最后来对比一下这两种方法:

1. 第一种方法简单,不需要额外的字符串,直接返回相关字符串,但需要七次判断。
2. 第二种方法,四次判断,但是需要额外的字符串来存储结果。

其实,就本题而言,我们也许更偏向用第二种方法,原因不过是打的代码少。而不是觉得第二种方法计算量较少。`φ(゜▽゜*)♪`

完整代码:

```javascript

function run(num) {
    num = Number(num);
    var ret = '';

    if (num % 3 == 0) {
        ret += 'Fizz';
    }
    if (num % 5 == 0) {
        ret += 'Buzz';
    }
    if (num % 7 == 0) {
        ret += 'Whizz';
    }
    if (ret == '') {
        ret = num.toString();
    }
    
    return ret;
}

var test1 = function () {
    for (var i = -100; i < 100; i++) {
        run(i);
        document.write('when run(' + i + ') return ' + run(i) + '<br>');
    }
    document.write('test end<br>');
}

test1();

显示问题

结果一行一行的显示出来,实在是有点不好看,那为什么不整理一下显示的结果呢~。所以有了如下的代码:

HTML :

<!DOCTYPE html>
<html>

<head>
    <title>Run number</title>
</head>

<body>
   <input type="button" value="start" onclick="test1();"/>
    <h2>Other</h2>
    <p id="other"></p>
    <h2>Fizz</h2>
    <p id="mod3"></p>
    <h2>Buzz</h2>
    <p id="mod5"></p>
    <h2>Whizz</h2>
    <p id="mod7"></p>
    <h2>FizzBuzz</h2>
    <p id="mod35"></p>
    <h2>FizzWhizz</h2>
    <p id="mod37"></p>
    <h2>BuzzWhizz</h2>
    <p id="mod57"></p>
    <h2>FizzBuzzWhizz</h2>
    <p id="mod357"></p>
</body>

<script src="script.js"></script>

</html>

Javascript :

function visaul(str, num) {
    var td;
    var flag = 0;

    if (str == 'Fizz') {
        td = document.getElementById('mod3');
        flag = 1;
    }
    if (str == 'Buzz') {
        td = document.getElementById('mod5');
        flag = 1;
    }
    if (str == 'Whizz') {
        td = document.getElementById('mod7');
        flag = 1;
    }
    if (str == 'FizzBuzz') {
        td = document.getElementById('mod35');
        flag = 1;
    }
    if (str == 'FizzWhizz') {
        td = document.getElementById('mod37');
        flag = 1;
    }
    if (str == 'BuzzWhizz') {
        td = document.getElementById('mod57');
        flag = 1;
    }
    if (str == 'FizzBuzzWhizz') {
        td = document.getElementById('mod357');
        flag = 1;
    }

    if (flag == 0) {
        td = document.getElementById('other');
    }

    var newNode = document.createTextNode(num.toString() + "  ");
    newNode.innerHTML = num.toString();
    td.appendChild(newNode);
}

function run(num) {
    num = Number(num);

    var ret = '';

    if (num % 3 == 0) {
        ret += 'Fizz';
    }
    if (num % 5 == 0) {
        ret += 'Buzz';
    }
    if (num % 7 == 0) {
        ret += 'Whizz';
    }
    if (ret == '') {
        ret = num.toString();
    }
    
    visaul(ret, num);
    return ret;
}

var test1 = function () {
    for (var i = 1; i < 1000; i++) {
        run(i);
        //document.write('when run(' + i + ') return ' + run(i) + '<br>');
    }
    //document.write('test end<br>');
}

显示图:

结果图

纯减少代码量


function run(num) {
    num = Number(num);

    var ret = '';

    ret += num % 3 == 0 ? 'Fizz' : '';
    ret += num % 5 == 0 ? 'Buzz' : '';
    ret += num % 7 == 0 ? 'Whizz' : '';
    ret = ret == '' ? num.toString() : ret;

    return ret;
}

相关文章

  • FizzBuzzWhizz

    本篇仅讨论此题目,若需查看与 javascript 相关信息,请查看本人另一篇文章 javascript 基础入门...

  • FizzBuzzWhizz

    题目描述:FizzBuzzWhizz 需求: when run(3) return 'Fizz'when run(...

  • FizzBuzzWhizz

    经分析该问题主要需要解决一下问题: 1.判断公倍数。2.实现字符串连接解决方法如下:1.依次判断是否是3、5、7的...

  • FizzBuzzWhizz

    需求分析如下: 1.run 的参数为 3、5和7共同的倍数,run 的参数为 5和7共同的倍数...可以转换为nu...

  • FizzBuzzWhizz

    JavaScript 针对那道题,我是这么想的: 先判断是否为3 and 5 and 7的公倍数,若不是接着判断,...

  • FizzBuzzWhizz

    FizzBuzzWhizz 起初考虑的时候觉得rule比较简单,运用最基本的思想,逐个判断条件发现确实太繁杂。做完...

  • FizzBuzzWhizz

    需求: when run(3) return 'Fizz'when run(5) return 'Buzz'whe...

  • FizzBuzzWhizz

    作业要求: 1.通过document.write()方法,将以上需求的每一条调用结果打印出来,结果会在屏幕右边显示...

  • FizzBuzzWhizz

    FizzBuzzWhizz题目需求: when run (3) return 'Fizz'when run(5) ...

  • FizzBuzzWhizz

    黑珍珠号_陈祥梅 题目需求 when run(3) return 'Fizz'when run(5) return...

网友评论

    本文标题:FizzBuzzWhizz

    本文链接:https://www.haomeiwen.com/subject/fvplottx.html