1. 程式人生 > >【Java筆試題】愛因斯坦的階梯問題

【Java筆試題】愛因斯坦的階梯問題

1、題目

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

2、解題思想

從上面的描述中,可以把這個問題用數學方程式的形式表達出來,其具體形式如下:

  • x%2=1
  • x%3=2
  • x%5=4
  • x%6=5
  • x%7=0

從上面的表示式中不難看出,此方程x的解應該有無窮個,但這裡要求的是那個最小的解。這個解一定是 7 的倍數,因為x%7=0,因此就用 7 的倍數依次與 2、3、5、6 進行取模運算,如果都符合了上面表示式的條件,那麼這個數就是本題的答案。

3、Java程式碼

public class StairsFlight {
    public static void main(String[] args) {
        int x = 7, i, res = 0;
        boolean flag = false;
        // 將迴圈次數定為50,表示尋找範圍為:7~350之間
        for (i = 1; i <= 50; i++) {
            if ((x % 2 == 1) && (x % 3 == 2) && (x % 5 == 4) &&
(x % 6 == 5)) { res = x; flag = true; break; } x = 7 * (i + 1); } if (true == flag) System.out.println("關於愛因斯坦的階梯問題的答案是:" + res); else System.out.println("在7的1~50倍這個範圍內沒有結果"); }
}