愛因斯坦臺階問題

最近面試的時候做過一道算法筆試題我印象很深,乍一看無從下手,仔細分析後發現有規律可循,最後將代碼手寫出來了,特此記錄一下。

愛因斯坦臺階問題

愛因斯坦曾經提出過這樣一道有趣的數學題:有一個長階梯,若每步上2階,最後剩下1階;若每步上3階,最後剩2階;若每步上5階,最後剩下4階;若每步上6階,最後剩5階;只有每步上7階,最後剛好一階也不剩。請問該階梯至少有多少階。

分析

一看到這道題的時候,不知道從哪下手,沒有什麼思路,於是在紙上寫了

2A+1

3B+2

5C+4

6D+5

7E

我發現這5個算數題最終結果是一致的,即2A+1=3B+2=5C+4=6D+5=7E,其中7乘以E就是最終結果,所以階梯數等於7的倍數!

那麼只需要以7的倍數爲基礎,循環所有7的倍數直到找到一個數字能同時滿足以上所有的算術結果。

以下爲具體代碼實現

public class EinsteinStepNumber {

    public static int getEinsteinStepNumber(){
        //創建i=1,沒有大小限制的,i++的for循環
        for (int i = 1;; i++) {
            //臺階數result總是7的倍數
            int result = 7 * i;
            //如果result同時滿足5個算數結果,則返回該result
            if(result % 2 == 1 && result % 3 == 2 && result % 5 ==4 && result %6 == 5){
                return result;
            }
        }
    }

    public static void main(String[] args) {
        System.out.println(getEinsteinStepNumber());
    }
}

最後得到滿足條件的臺階數爲119

雖然不是什麼複雜的算法題,但是能手寫出來還是蠻開心的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章