• 对Thoughtworks的有趣笔试题实践


    记得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名学生应该报数的数或单词

    public class Test2 {
    	//单词
    	public static String[] wordStr = { "Fizz", "Buzz", "Whizz" };
    	//特殊数字
    	public static int[] specialNum = { 3, 5, 7 };
    	public static void main(String[] args) {
    		for (int i = 1; i <= 100; i++) {
    			if (i > 10) {
    				if (i % 10 == specialNum[0] || i / 10 == specialNum[0]) {
    					// 显示规则5
    					System.out.println(wordStr[0]);
    				} else {
    					//规则3、4
    					getResult(i, true);
    				}
    			} else {
    				getResult(i, true);
    			}
    		}
    
    	}
        
    	// 对单个数字进行测试
    	public static void getUnitTestResult(int i) {
    		if (i > 10) {
    			if (i % 10 == specialNum[0] || i / 10 == specialNum[0]) {
    				// 显示规则5
    				System.out.println(wordStr[0]);
    			} else {
    				getResult(i, true);
    			}
    		} else {
    			getResult(i, true);
    		}
    	}
       //获得结果
    	public static void getResult(int i, boolean isCompute) {
    		if (isCompute) {
    			// 规则3
    			if (i % specialNum[0] == 0) {
    				System.out.println(wordStr[0]);
    				return;
    			}
    			if (i % specialNum[1] == 0) {
    				System.out.println(wordStr[1]);
    				return;
    			}
    			if (i % specialNum[2] == 0) {
    				System.out.println(wordStr[2]);
    				return;
    			}
    			// 规则4
    			if (i % specialNum[0] == 0 && i % specialNum[1] == 0) {
    				System.out.println(wordStr[0] + wordStr[1]);
    				return;
    			} else if (i % specialNum[0] == 0 && i % specialNum[2] == 0) {
    				System.out.println(wordStr[0] + wordStr[2]);
    				return;
    			} else if (i % specialNum[1] == 0 && i % specialNum[2] == 0) {
    				System.out.println(wordStr[1] + wordStr[2]);
    				return;
    			} else if (i % specialNum[0] == 0 && i % specialNum[1] == 0 && i % specialNum[2] == 0) {
    				System.out.println(wordStr[0] + wordStr[1] + wordStr[2]);
    				return;
    			}
    			System.out.println(i);
    		} else {
    			System.out.println(i);
    		}
    	}
    
    }
    

     运行结果

    1
    2
    Fizz
    4
    Buzz
    Fizz
    Whizz
    8
    Fizz
    Buzz
    11
    Fizz
    Fizz
    Whizz
    Fizz
    16
    17
    Fizz
    19
    Buzz
    Fizz
    22
    Fizz
    Fizz
    Buzz
    26
    Fizz
    Whizz
    29
    Fizz
    Fizz
    Fizz
    Fizz
    Fizz
    Fizz
    Fizz
    Fizz
    Fizz
    Fizz
    Buzz
    41
    Fizz
    Fizz
    44
    Fizz
    46
    47
    Fizz
    Whizz
    Buzz
    Fizz
    52
    Fizz
    Fizz
    Buzz
    Whizz
    Fizz
    58
    59
    Fizz
    61
    62
    Fizz
    64
    Buzz
    Fizz
    67
    68
    Fizz
    Buzz
    71
    Fizz
    Fizz
    74
    Fizz
    76
    Whizz
    Fizz
    79
    Buzz
    Fizz
    82
    Fizz
    Fizz
    Buzz
    86
    Fizz
    88
    89
    Fizz
    Whizz
    92
    Fizz
    94
    Buzz
    Fizz
    97
    Whizz
    Fizz
    Buzz
    

      

      

    对单个数字进行测试

    public class TestUnit {
    	public static void main(String[] args) {
    		Test2.getUnitTestResult(7);
    	}
    
    }
    

      

  • 相关阅读:
    CodeSmith将模板文件批量生成文件的方法
    VSFTP
    Retrieving the COM class factory for component with CLSID … failed due to the following error: 80070005.
    简单的centos 5.3 LEMP以及vsftpd配置
    jQuerySelectors(选择器)的使用(一、基本篇)
    文件服务器 之 VSFTPD的高手篇
    jQuery常用技巧大放送
    google ads 黑名单目录
    “VPS FTP应用”目录存档
    用上了LNMP,一键安装实在爽,速度杠杠的 用上了LNMP,一键安装实在爽,速度杠杠的
  • 原文地址:https://www.cnblogs.com/tleopard/p/5249455.html
Copyright © 2020-2023  润新知