1. 程式人生 > >最難面試的IT公司之ThoughtWorks程式碼挑戰——FizzBuzzWhizz遊戲

最難面試的IT公司之ThoughtWorks程式碼挑戰——FizzBuzzWhizz遊戲

  • 三個數都是個位數,這裡也沒說是否包含0(0難道不是個位數?),而且這三個個位數並不一定是素數(質數),因此在判斷倍數時要小心,不能對三個數的乘積直接求餘。
  • 三個數都必須互不相同。

2. 對於報數條件,我們應該逆序處理,比如先判斷條件5,再判斷條件4,4裡面也要逆序,先判斷是否同時是三個特殊數的倍數,最後判斷條件3,都不滿足直接輸出該數字,流程如下(假設當前數是n,三個數分別是num1,num2,num3):

  • 如果n中包含了num1,則直接輸出“Fizz”,這裡如何用程式判斷一個整數是否包含一個數字也許也是個考查點,我用Java寫的,為了簡單,直接將n轉換為String然後使用indexOf判斷。
  • 如果n同時是num1, num2和num3的倍數,則輸出“FizzBuzzWhizz”,如果是num1和num2的倍數,則輸出“FizzBuzz”,如果是num2和num3的倍數,則輸出“BuzzWhizz”,如果是num1和num3的倍數,則輸出“FizzWhizz”。否則,就判斷是否是單個num1或num2或num3的倍數,如果是就輸出相應的字串。
  • 如果上面都不滿足,則直接輸出n即可。

這樣的思路寫程式就非常的簡單,如下(這是反例,是大多數人都會寫的程式碼,相信也是ThoughtWorks公司最不想看到的程式碼):

import java.util.Scanner;

public class FizzBuzzWhizz {

    /**
     * @brief FizzBuzzWhizz game.
     */
    public static void main(String[] args) {

        Scanner in = new Scanner(System.in);
        int num1 = in.nextInt();
        int num2 = in.nextInt();
        int num3 = in.nextInt();

        while (num1 <= 0 || num1 >= 10 || num2 <= 0 || num2 >= 10 
                || num3 <= 0 || num3 >= 10 || num1 == num2 || num2 == num3
                || num1 == num3) {
            System.out.println("These three digits must be between 1 and 9 and also" +
                    "be different with each other, please input again.");
            num1 = in.nextInt();
            num2 = in.nextInt();
            num3 = in.nextInt();
        }
        
        for(int n = 1; n <= 100; n++) {
            if(String.valueOf(n).indexOf(num1 + 48) != -1)
                System.out.println("Fizz");
            else if(n % num1 == 0 && n % num2 == 0 && n % num3 == 0)
                System.out.println("FizzBuzzWhizz");
            else if(n % num1 == 0 && n % num2 == 0 )
                System.out.println("FizzBuzz");
            else if(n % num2 == 0 && n % num3 == 0)
                System.out.println("BuzzWhizz");
            else if(n % num1 == 0 && n % num3 == 0)
                System.out.println("FizzWhizz");
            else if(n % num1 == 0)
                System.out.println("Fizz");
            else if(n % num2 == 0)
                System.out.println("Buzz");
            else if(n % num3 == 0)
                System.out.println("Whizz");
            else
                System.out.println(n);
        }
    }
}

當然不是一個.java檔案提交上去就可以了,為了體現嚴謹性,你還需要寫環境說明、執行說明、單元測試等等。單元測試挺重要,能寫出什麼樣的測試用例也能反映出你思維的縝密性,比如這裡至少包括以下幾個測試用例:

  • 輸入中有負數、有0、有大於10的數、有相等的數,這時候的處理是全部重輸還是不符合條件的重輸,我這裡選擇的是全部重輸。
  • 輸入全部為素數、全部為合數、部分素數部分合數,體現你沒有誤解題目意思是全素數。

這是我也可能是大多數人一股腦的想法,當然題目本身沒有這麼簡單,肯定還有許多我沒有考慮到的地方,這裡只是提供一個反例。

大家先別罵我的程式碼或罵這些公司出的這些題目,肯定有他們自己的道理,也許等我們看到大牛針對這樣的需求寫出不到10行的程式碼且複雜度最低,也許我們就知道原來他們想要的是這樣的程式碼。

歡迎大家提出自己的寶貴意見和更好更輕的程式碼或想法,共同探討這些大公司到底想要考我們什麼東西。

------------------------------------------------------------------

更新:感謝網友@mringg提供了一個更簡潔的程式碼,根據需求,完全不必按部就班的像我那樣,如下的判斷更好:

for(int n = 1; n <= 100; n++) {
    flag = true;
    if(String.valueOf(n).indexOf(num1 + 48) != -1) {
        System.out.println("Fizz");
        continue;
    }
    if(n % num1 == 0) {
        System.out.print("Fizz");
        flag = false;
    }
    if(n % num2 == 0) {
        System.out.print("Buzz");
        flag = false;
    }
    if(n % num3 == 0) {
        System.out.print("Whizz");
        flag = false;
    }
    
    if(flag)
        System.out.print(n);
    System.out.println();
}

相關推薦

面試IT公司ThoughtWorks程式碼挑戰——FizzBuzzWhizz遊戲

三個數都是個位數,這裡也沒說是否包含0(0難道不是個位數?),而且這三個個位數並不一定是素數(質數),因此在判斷倍數時要小心,不能對三個數的乘積直接求餘。三個數都必須互不相同。2. 對於報數條件,我們應該逆序處理,比如先判斷條件5,再判斷條件4,4裡面也要逆序,先判斷是否同時是三個特殊數的倍數,最後判斷條件

程式設計師面試 IT 公司,這些細節一定要注意!

  作者 | 倪升武 責編 | 仲培藝 不管是應屆生還是在職人員,都會面臨著各種面試問題,網上有很多面經,但是大部分都是和技術相關的,總結有哪些技術需要掌握等等。 但是我覺得,面試本來就是一個雙向的選擇過程。當然,一開始是企業來挑選我們,但是如果你

面試IT公司的時候,程式設計師的簡歷應該寫多少個專案經驗比較合適?

直接給你貼個我自己的簡歷,你看看寫多少專案經驗合適。 個人簡歷 *** 個人能力: 10年網際網路從業經驗,60+團隊管理經驗,曾任系統架構師,技術副總監,CTO。主要負責專案,搜狐白社會(日線上300萬的SNS系統),金匯財富(日交易額3000萬的網際網路金

2016年加班“狠”的IT公司排行榜

來源:滴滴出行 在網際網路和IT行業的高速發展和激烈的競爭中,幾乎每家公司都將加班視為發揮企業最大潛能的必要因素,甚至成

BAT Androidproject師面試流程解析+還原真實完整的一線公司面試題

需要 綜合 沒有機會 渠道 考核 XML 升級 通訊 這也 尊重原創,轉載請寫明原文出處:http://blog.csdn.net/sk719887916/article/details/47040931 (skay) 求職和我

程式設計師面試100題長公共子序列

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

MultiBank Group拓展歐洲市場,躋身全球大的金融衍生品公司

法蘭克福--(美國商業資訊)--2017年12月,MultiBank Group宣佈推出資產管理業務,並在德國法蘭克福設立歐洲總部。自那以來,集團的資產管理業務迅速發展,同時,在法蘭克福證券交易所(Frankfurt Stock Exchange)交易的MultiBank Index linke

IT公司面試應該,是不是應該穿得不修邊幅一點?

去IT公司面試應該穿得 不修邊幅一點,頭發蓬亂一點,眼圈描黑一點,神情裝的憔悴一點,不要問我為什麽?至少這樣看上去像個程序員!~嗚嗚~ 一天妻子讓程序員丈夫去買東西,對丈夫說:你去樓下的商店買些面包,如果有雞蛋,買回來8個。若

程式設計師面試100題九 求子陣列的大和

                        題目:輸入一個整形陣列,數組裡有正數也有負數。陣列中連續的一個或多個整陣列成一個子陣列,每個子陣列都有一個和。求所有子陣列的和的最大值。要求時間複雜度為O(n)。       例如輸入的陣列為1, -2, 3, 10, -4, 7, 2, -5,和最大的子陣列為

這50款開源軟體IT公司追捧

本文介紹了多款知名的開源應用軟體,科技公司可以用它們來管理自己的 IT 基礎設施、開發產品。 過去十年間,許多科技公司已開始暢懷擁抱開源。許多公司使用開源工具來執行自己的 IT 基礎設施和網站,一些提供與開源工具相關的產品和服務,或基於開源工具而建的產品和服務,還有一些在為開原始碼貢獻程式碼或支援開

初戀面ThoughtWorks面試

9.13日經歷了人生的第一場面試,心情久久不能平靜,感想頗多。 在面試前,有兩天的時間做homework,通過完成的情況,來決定自己是否可以接收邀請,幸運的是,我在自我感覺完成特別差的情況下,接收到了通知面試的簡訊,感覺很幸運。但是在此期間,自己在做hom

Java三種面試者是面試討厭的,見即斃!

文章轉自:java學士     (文末附充電寶典) 職場人士在職業職業生涯中一定會面臨求職和麵試,想要面試過關需要三個條件:職業技能達標、問題回答得體、不犯致命錯誤。前兩點很好理解,我們來看看第三個,面試過程中有些致命的錯誤表現,會讓面試官反感,直接斃掉吧。 一起來看看

工作6年,我經歷的BAT等IT公司面試及離職感受

(點選上方公眾號,可快速關注) 畢業後幾年一直待在廣州,覺得這是一個比較生活化及務實的城市,其網際網路公司和相應的投融資環境都不如北深上活躍,大大小小的面試也有幾十個,有點規模的公司應該都面試過了,面試一般會見到主力技術人員,技術主管,技術總監,人力幾個人,狹義上還是可以看出一些公司文化技術氛圍滴,於是

面試常考點RecyclerView回收和複用機制全分析

開始最近在研究 RecyclerView 的回收複用機制,順便記錄一下。我們知道,RecyclerView 在 layout 子 View 時,都通過回收複用機制來管理。網上關於回收複用機制的分析講解的文章也有一大堆了,分析得也都很詳細,什麼四級快取啊,先去 mChangedScrap 取再去哪裡取啊之類的;

微軟面試100題19題:定義Fibonacci 數列如下,用快的方法求該數列的第n 項

題目:定義Fibonacci 數列如下:/ 0 n=0f(n)= 1 n=1\ f(n-1)+f(n-2) n=2輸入n,用最快的方法求該數列的第n 項。分析:在很多C 語言教科書中講到遞迴函式的時候,都會用Fibonacci 作為例子。因此很多程式設計師對這道題的遞迴解法

IT公司發展

     在我們身邊,你會發現存在著很多小型軟體公司,他們少則幾人,多則幾十人。他們在苦苦地經營著,有的不斷壯大,有的也在不斷衰弱。但是隨著中小型企業對資訊科技重視程度的提高,小型軟體公司也會有更多的機遇。那麼這些小型軟體公司如何尋求自己的出路呢? [產品定位不容忽視] 有

的不是遞迴,是這場面試的有緣無分

## 序言 我第一次接觸遞迴,是在大三的時候。 原諒我,我不是計算機專業學生,大三才開始自學程式碼。 還記得當時的題目是:一隻猴想摘樹上的桃,他可以一次摘1個,也可以一次摘2個,總共n個桃,他有多少種摘法? 明顯遞迴可以完美解決,但是當時我想了好幾個小時都沒想出思路。 那一夜,我就感覺自己就是那條猴。

廣通軟件獲“2016年度中國具影響力IT運維管理軟件提供商”殊榮

運維工程師 it運維12月16日,“科技原力覺醒引領創新巔峰”-- 2016創新影響力年會暨國家產業服務平臺2016年終評活動在北京裕龍國際酒店落下帷幕。本活動在主管部門的指導參與下,總結本年度技術成果並籍此對未來科技趨勢和方向做出展望與規劃,由國家十大產業服務平臺共同主辦,賽迪網承辦。500余名來自科技領域

Java制作練手速遊戲,Faker都堅持不了一分鐘

圖形圖像 java 想練手速,來啊,互相傷害啊Java制作最難練手速遊戲,目測Faker也堅持不了一分鐘制作思路:只靠Java實現。Java、Java、Java、Java、Java、Java、Java、Java、Java、Java、Java、Java、Java、Java、Java、Java、Java、

【2017-07-01】Linux應用開發工程師面試問題記錄二:關於結構體的大小及內存對齊問題

偶數 而且 strong span net 但是 開發 f11 flag Tencent後臺服務器開發有一道題是計算一個結構體的sizeof的大小: struct strData { int m_Int; char m_Char; short m_Short; char