用C求解爱因斯坦的数学问题

来源:百度知道 编辑:UC知道 时间:2024/05/13 19:42:48
题目:求爱因斯坦数学题.有一条长阶,若每步跨2阶,则最后剩1阶;若每步跨阶,
则最后剩2阶;若每步跨5阶,则最后剩4阶;若每步跨7阶,则最后正好一阶不剩.
答;
#include <stdio.h>

int main(void)
{
int steps = 29, i = 1;

while ( steps % 7 )
{
steps = (30 * ++i) - 1;
}

printf("Total steps: %d\n", steps);

return 0;
}
这是书上的答案,我看不懂它的算法,请高手指点迷津.

其实是个数学问题,知道了如何列式算这个题,也就知道算法。
若每步跨2阶,则最后剩1阶;若每步跨3阶, 则最后剩2阶;若每步跨5阶,则最后剩4阶,也就是说,每步跨2,3,5阶都是少1阶(即余数为-1)。取最小公倍数得总阶数=30*n-1,n为正整数。
于是就有了程序,不断增大n,一直到30*n-1是7的倍数即可,也就满足了所有条件。

1