【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倍这个范围内没有结果");
    }
}

你可能感兴趣的:(Java笔试题)