【Java筆試題】愛因斯坦的階梯問題
阿新 • • 發佈:2019-02-06
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倍這個範圍內沒有結果");
}
}