FizzBuzzWhizz

阅读: 评论:0

FizzBuzzWhizz

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


分析:

看完题目,其实没觉得很难,很简单嘛。

我当初的想法,程序分以下2步:

1. 获取输入,判断输入的正确性,用正则表达式判断。

2. 报数,第5点优先级高于3、4。第4点是第3点的延续。


结果:

做完后上传代码,然后看了其他童鞋的代码。呵呵,大家代码结构和思路还是有很大区别的。看来,我还是太弱了。

A同学表现出了框架设计的能力,代码结构分层很清晰。

B同学表现出了产品意识,各种场景和使用的情况都考虑进去了。

C同学表现出算法的能力,高效!

D同学表现出了按时完成题目的能力。



感想:

这道题目给了我很大的启示,一个人的能力从一个很小的问题都能体现出来。

这样形式的考题挺不错的,以后校招题目尝试这样的题目。


代码:

仅供参考,欢迎吐槽。

public class CountMain {private static final int MAX_NUMBER = 100;private static final String FIZZ = "Fizz";private static final String BUZZ = "Buzz";private static final String WHIZZ = "Whizz";private static final int ZERO_INDEX = 0;private static final int FIRST_INDEX = 1;private static final int SECOND_INDEX = 2;private static final String EXIT_COMMAND = "qq";public static void main(String[] args) {System.out.println("请输入3个不重复的个位正整数,格式如下3;5;7;(输入qq退出)");Scanner scanner = new Scanner(System.in);while (scanner.hasNext()) {String inputString = ();if (EXIT_COMMAND.equals(inputString)) {System.out.println("同学们再见!");scanner.close();it(0);}else {boolean flag = checkInput(inputString);if (flag) {int[] mumberArray = getNumberArray(inputString);numberOff(mumberArray);System.out.println("老师,报数结束!请再输入:");} else {System.out.println("老师,输入错误,请再次输入!");}}}}private static boolean checkInput(String pString) {String regex1 = "([1-9])";String regex2 = "(;)";String regex3 = "([1-9])";String regex4 = "(;)";String regex5 = "([1-9])";String regex6 = "(;)";Pattern pattern = Patternpile(regex1 + regex2 + regex3 + regex4 + regex5 + regex6, Pattern.CASE_INSENSITIVE | Pattern.DOTALL);Matcher matcher = pattern.matcher(pString);return matcher.find();}private static int[] getNumberArray(String pString) {int[] numberArray = new int[] { 0, 0, 0 };String[] inputString = pString.split(";");int length = inputString.length;for (int i = 0; i < length; i++) {if (inputString[i] != null) {numberArray[i] = Integer.parseInt(inputString[i]);}}return numberArray;}private static void numberOff(int[] pArray) {for (int i = 0; i <= MAX_NUMBER; i++) {String count = String.valueOf(i);String firstNumber = String.valueOf(pArray[ZERO_INDEX]);// containif (ains(firstNumber)) {System.out.println(FIZZ);continue;}// devideif (doDevide(i, pArray)) {System.out.println("");} else {System.out.println(count);}}}private static boolean doDevide(int pCount, int[] pArray) {boolean devideFlag = false;if (pCount % pArray[ZERO_INDEX] == 0) {devideFlag = true;System.out.print(FIZZ);}if (pCount % pArray[FIRST_INDEX] == 0) {devideFlag = true;System.out.print(BUZZ);}if (pCount % pArray[SECOND_INDEX] == 0) {devideFlag = true;System.out.print(WHIZZ);}return devideFlag;}}


本文发布于:2024-01-31 09:32:04,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170666472727551.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:FizzBuzzWhizz
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23