MOOC清华《程序设计基础》第5章:青蛙过河问题

这是2000年全国青少年信息学奥林匹克竞赛的一道试题。

问题描述:一条小溪尺寸不大,青蛙可以从左岸跳到右岸。在左岸有一石柱L,面积只容得下一只青蛙落脚,同样右岸也有一石柱R,面积也只容得下一只青蛙落脚。有一队青蛙从尺寸上一个比一个大,将青蛙从小到大编号,分别是1号、2号、3号……,规定初始时这队青蛙只能趴在左岸的石柱L上,按编号顺序一个摞一个,小的摞在大的上面,不允许大的摞在小的上面。在小溪中有s个石柱,y片荷叶,规定溪中的柱子上允许一只青蛙落脚,如有多只,同样要求按编号顺序一个摞一个,大的在下,小的在上,而且必须编号相邻。对于荷叶,只允许一只青蛙落脚,不允许多只在其上。对于右岸的石柱R,与左岸的石柱L一样面积只容得下一只青蛙落脚,多个青蛙落在上面必须一个摞一个,大的在下,小的在上,且编号相邻。青蛙从左岸的L跳走就不许再跳回来,从左岸L跳至右岸R,或从溪中荷叶或溪中石柱跳至右岸R上的青蛙也不允许再离开。问在已知溪中有s根石柱和y片荷叶的情况下,最多能跳过多少只青蛙?

#include <iostream>
using namespace std;

int main()
{
	int Jump(int s, int y);
	int s = 0, y = 0, sum = 0;
	cout << "请输入石柱个数 s:";
	cin >> s;
	cout << "请输入荷叶片数 y:";
	cin >> y;
	sum = Jump(s,y);
	cout << "最多能跳过" << sum << "只青蛙!" << endl;
	return 0;
}

int Jump(int s, int y)
{
	int k = 0;
	if(s == 0)
		k = y + 1;
	else
		k = 2 * Jump(s - 1, y);
		//代码很简单,但是思考到这一层,不简单 
	return k;
}
在s = 15, y = 15 的情况下,居然可以跳过五十多万只青蛙!递归的力量是伟大的!:




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值