记得2014年在网上看到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名学生应该报数的数或单词

  1. public class Test2 {
  2. //单词
  3. public static String[] wordStr = { "Fizz", "Buzz", "Whizz" };
  4. //特殊数字
  5. public static int[] specialNum = { 3, 5, 7 };
  6. public static void main(String[] args) {
  7. for (int i = 1; i <= 100; i++) {
  8. if (i > 10) {
  9. if (i % 10 == specialNum[0] || i / 10 == specialNum[0]) {
  10. // 显示规则5
  11. System.out.println(wordStr[0]);
  12. } else {
  13. //规则3、4
  14. getResult(i, true);
  15. }
  16. } else {
  17. getResult(i, true);
  18. }
  19. }
  20.  
  21. }
  22.  
  23. // 对单个数字进行测试
  24. public static void getUnitTestResult(int i) {
  25. if (i > 10) {
  26. if (i % 10 == specialNum[0] || i / 10 == specialNum[0]) {
  27. // 显示规则5
  28. System.out.println(wordStr[0]);
  29. } else {
  30. getResult(i, true);
  31. }
  32. } else {
  33. getResult(i, true);
  34. }
  35. }
  36. //获得结果
  37. public static void getResult(int i, boolean isCompute) {
  38. if (isCompute) {
  39. // 规则3
  40. if (i % specialNum[0] == 0) {
  41. System.out.println(wordStr[0]);
  42. return;
  43. }
  44. if (i % specialNum[1] == 0) {
  45. System.out.println(wordStr[1]);
  46. return;
  47. }
  48. if (i % specialNum[2] == 0) {
  49. System.out.println(wordStr[2]);
  50. return;
  51. }
  52. // 规则4
  53. if (i % specialNum[0] == 0 && i % specialNum[1] == 0) {
  54. System.out.println(wordStr[0] + wordStr[1]);
  55. return;
  56. } else if (i % specialNum[0] == 0 && i % specialNum[2] == 0) {
  57. System.out.println(wordStr[0] + wordStr[2]);
  58. return;
  59. } else if (i % specialNum[1] == 0 && i % specialNum[2] == 0) {
  60. System.out.println(wordStr[1] + wordStr[2]);
  61. return;
  62. } else if (i % specialNum[0] == 0 && i % specialNum[1] == 0 && i % specialNum[2] == 0) {
  63. System.out.println(wordStr[0] + wordStr[1] + wordStr[2]);
  64. return;
  65. }
  66. System.out.println(i);
  67. } else {
  68. System.out.println(i);
  69. }
  70. }
  71.  
  72. }

运行结果

  1. 1
  2. 2
  3. Fizz
  4. 4
  5. Buzz
  6. Fizz
  7. Whizz
  8. 8
  9. Fizz
  10. Buzz
  11. 11
  12. Fizz
  13. Fizz
  14. Whizz
  15. Fizz
  16. 16
  17. 17
  18. Fizz
  19. 19
  20. Buzz
  21. Fizz
  22. 22
  23. Fizz
  24. Fizz
  25. Buzz
  26. 26
  27. Fizz
  28. Whizz
  29. 29
  30. Fizz
  31. Fizz
  32. Fizz
  33. Fizz
  34. Fizz
  35. Fizz
  36. Fizz
  37. Fizz
  38. Fizz
  39. Fizz
  40. Buzz
  41. 41
  42. Fizz
  43. Fizz
  44. 44
  45. Fizz
  46. 46
  47. 47
  48. Fizz
  49. Whizz
  50. Buzz
  51. Fizz
  52. 52
  53. Fizz
  54. Fizz
  55. Buzz
  56. Whizz
  57. Fizz
  58. 58
  59. 59
  60. Fizz
  61. 61
  62. 62
  63. Fizz
  64. 64
  65. Buzz
  66. Fizz
  67. 67
  68. 68
  69. Fizz
  70. Buzz
  71. 71
  72. Fizz
  73. Fizz
  74. 74
  75. Fizz
  76. 76
  77. Whizz
  78. Fizz
  79. 79
  80. Buzz
  81. Fizz
  82. 82
  83. Fizz
  84. Fizz
  85. Buzz
  86. 86
  87. Fizz
  88. 88
  89. 89
  90. Fizz
  91. Whizz
  92. 92
  93. Fizz
  94. 94
  95. Buzz
  96. Fizz
  97. 97
  98. Whizz
  99. Fizz
  100. Buzz

  

  

对单个数字进行测试

  1. public class TestUnit {
  2. public static void main(String[] args) {
  3. Test2.getUnitTestResult(7);
  4. }
  5.  
  6. }

  

对Thoughtworks的有趣笔试题实践的更多相关文章

  1. ThoughtWorks西邮暑期特训营 -- JavaScript在线笔试题

    ThoughtWorks 公司在西邮正式开办的只教女生前端开发的女子卓越实验室已经几个月过去了,这次计划于暑期在西邮内部开展面向所有性别所有专业的前端培训. 具体官方安排请戳:ThoughtWorks ...

  2. flhs笔试题-回家上机实践

    这是最近参加的一个公司的笔试题,回家上机写了下代码,希望对有需要的小伙伴有用,简单实现字符串和数组在指定位置的插入: package org.flhs; import com.google.commo ...

  3. 嵌入式Linux C笔试题积累(转)

    http://blog.csdn.net/h_armony/article/details/6764811 1.   嵌入式系统中断服务子程序(ISR) 中断是嵌入式系统中重要的组成部分,这导致了很 ...

  4. C/C++ 笔试题

    /////转自http://blog.csdn.net/suxinpingtao51/article/details/8015147#userconsent# 微软亚洲技术中心的面试题!!! 1.进程 ...

  5. C/C++笔试题(很多)

    微软亚洲技术中心的面试题!!! .进程和线程的差别. 线程是指进程内的一个执行单元,也是进程内的可调度实体. 与进程的区别: (1)调度:线程作为调度和分配的基本单位,进程作为拥有资源的基本单位 (2 ...

  6. 【转】C++笔试题汇总

    原文:http://www.cnblogs.com/ifaithu/articles/2657663.html C#C++C多线程面试1.static有什么用途?(请至少说明两种)1)在函数体,一个被 ...

  7. 剑指Offer——滴滴笔试题+知识点总结

    剑指Offer--滴滴笔试题+知识点总结 情景回顾 时间:2016.9.18 15:00-17:00 地点:山东省网络环境智能计算技术重点实验室 事件:滴滴笔试   总体来说,滴滴笔试内容体量不算多, ...

  8. python笔试题(1)

            为了充实自己,小编决定上传自己见到的笔试题和面试题.可能要写好长时间,一时半会写不了多少,只能说遇到多少写多少吧,但是只要小编有时间,会持续上传(但是答案却不能保证,所以有看到错误的及 ...

  9. Java 面试/笔试题神整理 [Java web and android]

    Java 面试/笔试题神整理 一.Java web 相关基础知识 1.面向对象的特征有哪些方面 1.抽象: 抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面.抽象并 ...

随机推荐

  1. Angular2学习笔记(1)

    Angular2学习笔记(1) 1. 写在前面 之前基于Electron写过一个Markdown编辑器.就其功能而言,主要功能已经实现,一些小的不影响使用的功能由于时间关系还没有完成:但就代码而言,之 ...

  2. .NET Core & ASP.NET Core 1.0在Redhat峰会上正式发布

    众所周知,Red Hat和微软正在努力使.NET Core成为Red Hat企业版Linux (RHEL)系统上的一流开发平台选项.这个团队已经一起工作好几个月了,RHEL对.NET有许多需求.今天在 ...

  3. 【SSM框架】Spring + Springmvc + Mybatis 基本框架搭建集成教程

    本文将讲解SSM框架的基本搭建集成,并有一个简单demo案例 说明:1.本文暂未使用maven集成,jar包需要手动导入. 2.本文为基础教程,大神切勿见笑. 3.如果对您学习有帮助,欢迎各种转载,注 ...

  4. git 命令

    切换仓库地址: git remote set-url origin xxx.git切换分支:git checkout name撤销修改:git checkout -- file删除文件:git rm  ...

  5. jQuery学习之路(2)-DOM操作

    ▓▓▓▓▓▓ 大致介绍 jQuery作为JavaScript库,继承并发扬了JavaScript对DOM对象操作的特性,使开发人员能方便的操作DOM对象. ▓▓▓▓▓▓ jQuery中的DOM操作 看 ...

  6. JavaScript动画-磁性吸附

    ▓▓▓▓▓▓ 大致介绍 磁性吸附是以模拟拖拽为基础添加一个拖拽时范围的限定而来的一个效果,如果对模拟拖拽有疑问的同学请移步模拟拖拽. 源代码.效果:点这里 ▓▓▓▓▓▓ 范围限定(可视区) 先来看一个 ...

  7. 前端性能优化的另一种方式——HTTP2.0

    最近在读一本书叫<web性能权威指南>谷歌公司高性能团队核心成员的权威之作. 一直听说HTTP2.0,对此也仅仅是耳闻,没有具体研读过,这次正好有两个篇章,分别讲HTTP1.1和HTTP2 ...

  8. Python(九) Python 操作 MySQL 之 pysql 与 SQLAchemy

    本文针对 Python 操作 MySQL 主要使用的两种方式讲解: 原生模块 pymsql ORM框架 SQLAchemy 本章内容: pymsql 执行 sql 增\删\改\查 语句 pymsql ...

  9. 基于注解的bean配置

    基于注解的bean配置,主要是进行applicationContext.xml配置.DAO层类注解.Service层类注解. 1.在applicationContext.xml文件中配置信息如下 &l ...

  10. 防线修建 bzoj 2300

    防线修建(1s 512MB)defense [问题描述] 近来A国和B国的矛盾激化,为了预防不测,A国准备修建一条长长的防线,当然修建防线的话,肯定要把需要保护的城市修在防线内部了.可是A国上层现在还 ...