天天看點

最難面試IT公司的測試題問題:分析:解題代碼:執行效果:

逛網站時無意間看到一道測試題,看到這标題我吓到了(最難面試IT公司),本以為應該很難完成的,分析之後,花了半小時用python寫出來了,各位朋友們也可以測試測試哦。不限語言。

題如下:

你是一名體育老師,在某次課距離下課還有五分鐘時,你決定搞一個遊戲。此時有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

Whizz

8

11

FizzBuzz

16

17

19

一直到100

程式擷取3個個位數特殊值,然後循環從1說到100,如滿足問題中與特殊值的關系,則按指定的輸出。

對于上述問題描述中的關系,優先級分析如下:

1、如果數中包含了第一個數,忽略其它規則。說:Fizz

2、如同時是三個數的倍數,說:FizzBuzzWhizz

3、所報數字同時是兩個特殊數倍數,即第1、2個數的倍數說:FizzBuzz,第1、3個數的倍數說:FizzWhizz ,第2、3個數的倍數說:BuzzWhizz

4、所報數是第一個數的倍數,說:Fizz

5、所報數是第二個數的倍數,說:Buzz

6、所報數是第三個數的倍數,說:Whizz

7、如上面都不是,說:目前數字

如果輸入的數值不是3個個位數,則提示并退出,如下面兩次測試。

root@yangrong:/python# python Test.py

Please input three digit,and numbers lessthan 10, Example input:3,5,7  

input: a,b,c

Please input three digit,and numbers lessthan 10. Example: 3,5,7

input: 1,2,100

輸入正确的數值執行效果

input: 3,5,7

Whize

FizzWhizz

22

26

29

41

44

46

47

52

58

59

61

62

64

67

68

BuzzWhizz

71

74

76

79

82

86

88

89

92

94

97

寫完之後,發現代碼非常淩亂,一開始用了好多的循環完成了功能,後來思考之後把那些循環去掉,換成elif來寫的。代碼簡潔了一半。正如這道題要求所說:

即使簡單的代碼,做到盡善盡美一樣難能可貴,是以,送出之前,請想一想,它是不是可以更卓越。