首页 > 代码库 > 青蛙跳孔解题

青蛙跳孔解题

题目来自网上,如图:

 

首先,建立一个模型。

如图:

 

设一圈共有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.
pascal code

 

三、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.
pascal code


四、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.
pascal code

 

//end.--------------------------------------------------------------------------------------------