版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_37014990/article/details/79945077
且看题目:
有一个长阶梯,若每步上2阶,最后剩下1阶,若每步上3阶,最后剩下2阶,若每步上5阶,最后剩下4阶,若每步上6阶,最后剩下5阶,只有每步上7阶,最后刚好一阶也不剩下。
讲道理,笔者刚看到该题目的时候,一脸懵逼,完全不会做。但是,仔细一想,这题完全就是一道数学题,即:
设总台阶数为N,同时满足以下表达式的N值,便是总台阶数:
n = 1(mod 2)
n = 2(mod 3)
n = 4(mod 5)
n = 5(mod 6)
n = 0(mod 7)
表达式一出来,代码就好撸了:
public static int countNum(){
int n = 1; //记录台阶数
while(!(n % 2 == 1 && n % 3 == 2 && n % 5 == 4 && n % 6 == 5 && n % 7 == 0)){
n++;
}
return n;
}
当然,代码跑出来的结果为119,结果是正确的。
但是.....这段代码加法,就执行了119次,没错,就是如此暴力。
那么,我们稍微想想,最后一个表达式:n = 0(mod 7),讲道理,台阶数肯定是7的倍数......然而,当时读者根本就看不出来,结构,被熟人嘲讽了一阵.....
且看,代码:
public static int countNum(){
int n = 7; //记录台阶数,从7开始
while(!(n % 2 == 1 && n % 3 == 2 && n % 5 == 4 && n % 6 == 5 && n % 7 == 0)){
n = n + 7; //增加步长7
}
return n;
}
该程序,不知道做了几次加法,但总比一个个的加上去的好。