这里给出了部分题目的解答,请在尝试自己思考和尝试后,阅读解答。
【1288 爱因斯坦的数学题】
爱因斯坦出了一道这样的数学题:有一条长阶梯,若每步跨2阶,则最最后剩一阶,若每步跨3 阶,则最后剩2阶,若每步跨5阶,则最后剩4阶,若每步跨6阶则最后剩5阶。只有每次跨7阶,最后才正好一阶不剩。请问这条阶梯共有多少阶?本题有多个答案,只需要输出其中的最小值。
基本思路:本题使用了取余运算。 只需要穷举自然数 x,然后判断这个自然数 x 是否满足条件即可。若每步跨2阶,则最后剩一阶,写成数学表达就是 x%2 == 1,其他类似。
优化: 可以缩小穷举的范围,从题目中,可以推断出满足要求的 x 一定是 7 的倍数,而且是奇数。 这样 x 的起始值可以从 7 开始, 递增14。这样做有两个好处:1)x的范围缩小;2)判断条件简化。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | #include <stdio.h> int main(int argc, char *argv[]) { int x=7; while (1) { if (x%3==2 && x%5==4) { printf("%d\n", x); break; } x += 14; } return 0; } |
这个C程序可以很容易的转化成Java版本。使用Eclipse创建类 P1288 (表示Problem 1288题),需要 mian函数,然后将5~12行复制过来,只需修改一个地方:while (1) -> while(true)
1 2 3 4 5 6 7 8 9 10 11 12 | public class P1288 { public static void main(String[] args) { int x=7; while (true) { if (x%3==2 && x%5==4) { System.out.printf("%d\n", x); break; } x += 14; } } } |
注意:提交程序时,需要将类名改成 Main,否则会出现“编译错误”。