青蛙跳孔解题

题目来自网上,如图:

首先,建立一个模型。

如图:

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

时间: 2024-10-28 21:21:31

青蛙跳孔解题的相关文章

动态规划--青蛙跳

Description 在河上有一座独木桥,一只青蛙想沿着独木桥从河的一侧跳到另一侧.在桥上有一些石子,青蛙很讨厌踩在这些石子上.由于桥的长度和青蛙一次跳过的距离都是正整数,我们可以把独木桥上青蛙可能到达的点看成数轴上的一串整点:0,1,……,L(其中L是桥的长度).坐标为0的点表示桥的起点,坐标为L的点表示桥的终点.青蛙从桥的起点开始,不停的向终点方向跳跃.一次跳跃的距离是s到t之间的任意正整数(包括s,t).当青蛙跳到或跳过坐标为L的点时,就算青蛙已经跳出了独木桥. 题目给出独木桥的长度L,

青蛙跳台阶问题

题目:一只青蛙一次可以跳上 1 级台阶,也可以跳上2 级.求该青蛙跳上一个n 级的台阶总共有多少种跳法. 我的思路:最开始我的思路是把这个看成是一个数学问题,n=i*1+k*2先把所有可能满足这个公式的i和k求出来.然后在对i和k做排列组合.很明显i的范围应该是0<i<=n,所以我们已i开始迭代.下面贴上代码吧.把注释都写上! public int JumpFloor(int target) { int step = 0; for (int i = 0; i <= target; i++

青蛙跳台阶问题-斐波拉契数列

题目1:一个台阶总共有n级,如果一次可以跳1级,也可以跳2级.求总共有多少种跳法 首先我们考虑最简单的情况,加入只有1级台阶,那显然只有一种跳法,如果有2级台阶,那就有两种跳的方法了:一种是分两次跳,每次跳1级:另外一种就是一次跳2级 现在我们来讨论一般情况.我们把n级台阶时的跳法看成是n的函数,记为f(n).当n>2时,第一次跳的时候就有两种不同的选择:一是第一次只跳1级,此时跳法数目等于后面剩下的n-1级台阶的跳法数目,即为f(n-1):另外一种选择是第一次跳2级,此时跳法数目等于后面剩下的

剑指offer青蛙跳台阶问题

(1)一只青蛙一次可以跳上 1 级台阶,也可以跳上2 级.求该青蛙跳上一个n 级的台阶总共有多少种跳法. //递归方式 public static int f(int n) { //参数合法性验证 if (n < 1) { System.out.println("参数必须大于1!"); System.exit(-1); } if (n == 1 || n == 2) return 1; else return f(n - 1) + f(n - 2); } //非递归方式 publ

c语言:一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法?

一只青蛙一次可以跳上1级台阶,也可以跳上2级.求该青蛙跳上一个n级的台阶总共有多少种跳法? 解:把n级台阶时的跳法记为f(n),当n>2时,第一次跳的时候有两种不同的选择:一是第一次只跳1级,此时跳法数目等于后面剩下的n-1级台阶的跳法数目,即为f(n-1);另外一种是第一次跳2级,此时跳法数目等于后面剩下的n-2级台阶的跳法数目,即为f(n-2);因此n级台阶时的跳法为f(n)=f(n-1)+f(n-2).不难看出这实际是斐波拉契数列的变形应用,把斐波拉契数列的每一项向前移动了1位. 程序:

青蛙跳台阶的问题

#斐波纳契 一只青蛙一次可以跳上1级台阶,也可以跳上2级.求该青蛙跳上一个n级的台阶总共有多少种跳法. # 假设最后一步到X级台阶,有F(X)种走法, # 这题求的就是F(11) # 因为每步可以迈1或2级台阶. # 所以最后一步到11级台阶, # 而倒数第2步可能是在第10或9级台阶. # 所以到11级台阶的走法,是到第10或9级台阶走法的和. # 同样到9级台阶的走法,是到第7或8级台阶走法的和. # ................... # F(11) # =F(9)+F(10) # =

HDU 5037(Frog-贪心青蛙跳石子)

Frog Time Limit: 3000/1500 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others) Total Submission(s): 1596    Accepted Submission(s): 442 Problem Description Once upon a time, there is a little frog called Matt. One day, he came to a river.

青蛙跳-算法

/***一只青蛙一次可以跳上1级台阶,也可以跳上2级.求该青蛙跳上一个n级的台阶总共有多少种跳法.*/public class Solution { public int JumpFloor(int target) { if(target<=2){ return target; } int start=1; int end =2; end=this.sum(start,end,3,target); return end; }/***分析出数据: 1 2 3 5 8*start 前一个台阶跳法*e

一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法。

import java.util.HashMap; //一只青蛙一次可以跳上1级台阶,也可以跳上2级.求该青蛙跳上一个n级的台阶总共有多少种跳法. public class Solution { //方法一:递归求解 public static int JumpFloor1(int n) { if(n<1){ return 0; } if(n==1){ return 1; } if(n==2){ return 2; } return JumpFloor1(n-1)+JumpFloor1(n-2)