最近面试的时候做过一道算法笔试题我印象很深,乍一看无从下手,仔细分析后发现有规律可循,最后将代码手写出来了,特此记录一下。
爱因斯坦台阶问题
爱因斯坦曾经提出过这样一道有趣的数学题:有一个长阶梯,若每步上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
虽然不是什么复杂的算法题,但是能手写出来还是蛮开心的。