爱因斯坦台阶问题

最近面试的时候做过一道算法笔试题我印象很深,乍一看无从下手,仔细分析后发现有规律可循,最后将代码手写出来了,特此记录一下。

爱因斯坦台阶问题

爱因斯坦曾经提出过这样一道有趣的数学题:有一个长阶梯,若每步上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

虽然不是什么复杂的算法题,但是能手写出来还是蛮开心的。

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值