青蛙过河水题水博客

15 篇文章 0 订阅
1 篇文章 0 订阅

找规律:
将此问题分为两大块:当河中石柱(x)为0时,通过的青蛙数目仅与当前荷叶数目(y)有关:num_frog = y + 1
当存在河中石柱时,可以把青蛙跳过的过程等价为一下过程:
在这里插入图片描述
分为红色的和绿色的部分,将其中一个河中石柱看做是右石柱,然后借用其他的荷叶和石柱将青蛙尽可能多的转移到该石柱上,然后再把除去本石柱的其他石柱和荷叶跟真右石柱看做一个整体,进行转移,两个过程的石柱和荷叶类型一模一样,所以两次分别转移的青蛙数目是一样的,最后再利用石柱和荷叶将河中石柱的青蛙转移到右石柱上,注:由于这里的转移过程和第一步的转移过程中的石柱和荷叶数目完全一样,所以在这里石柱上的青蛙一定能全部的转移到右石柱上。
例如:
在这里插入图片描述
河中分别有一个石柱和一个荷叶的情况,第一种转移方式的系统如上图所示,在这个新系统里,转移的工具只有一个荷叶
在这里插入图片描述
第二次转移过程如图所示,该系统内只有一个荷叶作为转移的工具,所以两次的转移的青蛙数目是一样的。
最后还要将河中石柱的青蛙转移到右岸上
在这里插入图片描述
要转移的系统的条件是和之前一模一样的,所以河中石柱的青蛙一定能全部转移到右岸上

所以转移的方程为:2 * cross_river(x - 1, y)
代码:

#include<stdio.h>
int cross_river(int x, int y){
    if (x == 0) return y + 1;
    else return 2 * cross_river(x - 1, y);
}
int main(){
    int x, y;
    scanf("%d%d", &x, &y);
    printf("%d\n", cross_river(x, y));
}

本题目的递归思路:每次的转移方案都能用少一个石柱且荷叶数目相同的情况求出来,并且当石柱的数目为0时过河青蛙数目只与荷叶数目有关,以石柱数目为0的情况作为结束递归的条件。通过每一次倒退到求少一个石柱的情况的过河青蛙数目,最终得到结果。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值