码迷,mamicode.com
首页 > 其他好文 > 详细

青蛙过河

时间:2020-03-04 23:21:16      阅读:649      评论:0      收藏:0      [点我收藏+]

标签:space   bit   style   例子   scan   include   div   namespace   跳过   

# 题意
左,右各一个塔,这个塔一旦放上就不能在动,小溪中n个塔,m片叶,柱可以摞任意数量但服从汉诺塔,叶子只能放一个,而且二者任意一个移动到右边的柱子上后就不允许离开,问最多可以跳过多少只青蛙

# 题解
一、 首先考虑没有石柱的情况,即n=0。
1) 当m=0时,只能跳过一只青蛙,由L直接跳到R。
2) 当m=1时,可以跳过两只青蛙。
过程为:青蛙1从L跳到荷叶上,青蛙2从L直接跳到R,最后青蛙1从荷叶跳到R。
3) 当y=2时,可以跳过3只青蛙。过程为:青蛙1从L跳到荷叶1,青蛙2从L跳到荷叶2,青蛙3从L跳到R,青蛙2从荷叶2跳到R,青蛙1从荷叶1跳到R。
4) 由上面的例子我们可以看出,当只考虑荷叶时,每增加一片荷叶,跳过的青蛙数加一,即青蛙数为m+1。
二、 有石柱的情况
1) 当n=1,m=0时,可以跳过两只青蛙。过程为:青蛙1从L跳到石柱上,青蛙2从L跳到R,青蛙1从石柱跳到R。
2) 当n=1,m=1时,可以跳过4只青蛙。过程为:
青蛙1从L跳到荷叶上,
青蛙2从L跳到石柱上,青蛙1从荷叶上跳到石柱上,
青蛙3从L跳到荷叶上,青蛙4从L跳到R,青蛙3从荷叶上跳到R,青蛙1从石柱上跳到荷叶上,青蛙2从石柱上跳到R,青蛙1从荷叶跳到R。
步骤1:青蛙1和青蛙2借助荷叶跳到石柱上;
步骤2:青蛙3和青蛙4借助荷叶跳到R;
步骤3:青蛙1和青蛙2借助荷叶由石柱跳到R。
3) 当n=1,m为任意值时,可以跳过2 * (m+1)只青蛙。过程可以理解为3步:
步骤1:前m+1只青蛙借助荷叶跳到石柱上;
步骤2:后m+1只青蛙借助荷叶跳到R;
步骤3:前m+1只青蛙借助荷叶由石柱跳到R。
4) 当n=2,m为任意值时,可以跳过4 * (m+1)只青蛙。显然当n=1时,m为相同值时可以跳过2 * (m+1)只青蛙。那么这个过程可以理解为:
步骤1:前2 * (m+1)只青蛙利用荷叶和其中一个石柱(这里设为S1)从L跳到另外一根石柱(S2)上;
步骤2:后2 * (m+1)只青蛙借助荷叶和S1从L跳到R;
步骤3:前2 * (m+1)只青蛙从S2借助荷叶和S1跳到R
结论 n个石柱的移动次数是n-1个石柱移动次数的两倍,t=2*jump(n-1,m);

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 int n,m;
 4 int jump(int n,int m){
 5     int t;
 6     if(n==0)
 7         t=m+1;
 8     else {
 9         t=2*jump(n-1,m);
10     }
11     return t;
12 }
13 int main(){
14     while(scanf("%d%d",&n,&m)!=EOF){
15         printf("%d\n",jump(n,m));
16     }
17     return 0;
18 }

 

青蛙过河

标签:space   bit   style   例子   scan   include   div   namespace   跳过   

原文地址:https://www.cnblogs.com/hhyx/p/12416650.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!