首页 > 代码库 > 青蛙跳孔解题
青蛙跳孔解题
题目来自网上,如图:
首先,建立一个模型。
如图:
设一圈共有n个孔,每个孔的标号,依次为:0,1,2,。。。n-1。在图中为内圈。
当青蛙跳完第一圈,会循环进入第二圈,即从n-1孔,又回到了0,再1,2,3。。。
为了便于分析,我们假设青蛙跳过n-1孔之后,进入第n个孔,然后再n+1,n+2,。。。即进入了第二圈。
不难发现,第n孔,即第0孔,第n+1孔,即第1孔。。。
图中只画出了两圈,我们可以想像,青蛙跳到第二圈的最后一个位置,即第2*n-1孔之后,进入第2*n孔,开始了第三圈。
第三圈,从2*n孔,到3*n-1孔,其实就是第0孔,到第n-1孔。
有了这个模型之后,分析就相当方便了。青蛙从0开始起跳。如果隔k孔跳,那么就从0孔,跳到k+1孔。我们可以发挥一下想像,假如隔1孔跳,在数列:
0,1,2,3,4,5,6,7,8,。。。
中,按整数顺序数下去时,凡是2(即k+1)的倍数,都是青蛙的着地点:
0,2,4,6,8,。。。
当k为其他数时,道理都是一样的。
设数为x。
题目给出了四个条件,逐一分析:
一、x的百位数是8
这个容易理解,不说。
二、x是9的倍数
因为隔8孔跳一步,会回到A孔(即第x孔),所以x是9的倍数。
在百位数为8的数中,凡是9的倍数的数有:
801,810,819,828,837,846,855,864,873,882,891。
var i:longint; begin for i:=800 to 899 do begin if(i mod 9=0) then writeln(i); end; end.
三、x+2是7的倍数
因为每隔6孔跳一步,跳到了B孔,B孔,即第x+2孔(根据前面的模型得到)。
所以x+2,为7的倍数。从前面得到的11个数中,进行筛选,剩下两个数符合要求:
810、873。
var i:longint; begin for i:=800 to 899 do begin if(i mod 9=0) and ((i+2) mod 7=0) then writeln(i); end; end.
四、2*x+4是8的倍数
因为每隔7孔跳一步,两圈后,到C孔。根据模型,C孔,即第 2*x+4 孔。
所以,2*x+4,为8的倍数。
在前面得到的两个数中,只有810符合要求。
所以,答案是810。
var i:longint; begin for i:=800 to 899 do begin if(i mod 9=0) and ((i+2) mod 7=0) and ((2*i+4) mod 8=0) then writeln(i); end; end.
//end.--------------------------------------------------------------------------------------------