zoukankan      html  css  js  c++  java
  • 参与《【拉勾专场】抛弃简历!让代码说话!》编程挑战的尝试

    强强联手,互联网垂直招聘专家拉勾网携手全球顶尖IT公司ThoughtWorks共同推出此次代码挑战!等你来打擂!

    题目:

    FizzBuzzWhizz
    
    你是一名体育老师,在某次课距离下课还有五分钟时,你决定搞一个游戏。此时有100名学生在上课。游戏的规则是:
    
    
    1. 你首先说出三个不同的特殊数,要求必须是个位数,比如3、5、7。
    2. 让所有学生拍成一队,然后按顺序报数。
    3. 学生报数时,如果所报数字是第一个特殊数(3)的倍数,那么不能说该数字,而要说Fizz;如果所报数字是第二个特殊数(5)的倍数,那么要说Buzz;如果所报数字是第三个特殊数(7)的倍数,那么要说Whizz。
    4. 学生报数时,如果所报数字同时是两个特殊数的倍数情况下,也要特殊处理,比如第一个特殊数和第二个特殊数的倍数,那么不能说该数字,而是要说FizzBuzz, 以此类推。如果同时是三个特殊数的倍数,那么要说FizzBuzzWhizz。
    5. 学生报数时,如果所报数字包含了第一个特殊数,那么也不能说该数字,而是要说相应的单词,比如本例中第一个特殊数是3,那么要报13的同学应该说Fizz。如果数字中包含了第一个特殊数,那么忽略规则3和规则4,比如要报35的同学只报Fizz,不报BuzzWhizz。
     
    现在,我们需要你完成一个程序来模拟这个游戏,它首先接受3个特殊数,然后输出100名学生应该报数的数或单词。比如,
     
    输入
    3,5,7
    输出(片段)
    
    1
    2
    Fizz
    4
    Buzz
    Fizz
    Whizz
    8
    Fizz
    Buzz
    11
    Fizz
    Fizz
    Whizz
    FizzBuzz
    16
    17
    Fizz
    19
    Buzz 
    …
    一直到100
    

      看到此题,经过分析3,4,5中5的优先级比较高,所以判断时先考虑判断5,然后再判断3,4,第一个想法的代码如下:

        public static void fbw(int[] num) {
            String[] words = { "Fizz", "Buzz", "Whizz" };
            for (int n = 1; n < 101; n++) {
                if ( n / 10 == num[0] || n % 10 == num[0])
                    System.out.println(words[0]);
                else {
                    String str = "";
                    for (int i = 0; i < 3; i++) {
                        if (n % num[i] == 0)
                            str += words[i];
                    }
                    if (str.length() == 0)
                        str += n ;
                    System.out.println(str);
                }
            }
        }

      一、num参数表示设定的初始三个特殊数。

      二、由于只有一个3位数100,所以也得考虑3位数的情况,1位或者2两位均可由n / 10 == num[0] || n % 10 == num[0]来解决;3位数100n / 100 == num[0] || n % 100 == num[0]来解决。如果考虑特殊数为1的情况,你们所有 的人都得报Fizz。

      三、除上述情况外,就需要根据是否是三个特殊数的倍数来决定所报的内容,这里要遍历三个特殊数。

      四、100的循环貌似性能差别甚小,一个优化貌似可以将String类型换位StringBuilder。。。

      五、自己玩的,就不参与也不提交代码了。。。。呵呵

      以上只是一种解决办法,这种办法应该是最容易想和最容易实现的办法吧,继续考虑其它更优的办法。。一个是O(n),n=100,二次循环可以换为一连串的if-else而已,没啥意思。。。。就不再改动了。。。  

      据说有用10行代码搞定的,不知道啥语言啊???

      看到有人发这个相关的帖子,本来29号晚上就写好这个文章了,本想着利用假期考虑考虑还有没有其他的解法,结果没时间了。。。就这样吧……

  • 相关阅读:
    Android Studio 开发
    Jsp编写的页面如何适应手机浏览器页面
    电影
    Oracle 拆分列为多行 Splitting string into multiple rows in Oracle
    sql server 2008 自动备份
    WINGIDE 激活失败
    python安装 错误 “User installations are disabled via policy on the machine”
    ble编程-外设发送数据到中心
    iOS开发-NSString去掉所有换行及空格
    ios9 字符串与UTF-8 互相转换
  • 原文地址:https://www.cnblogs.com/lxf20061900/p/3700176.html
Copyright © 2011-2022 走看看