递推题之分鱼问题

本文深入探讨了递推算法在解决分鱼问题中的应用。通过实例解析,阐述了如何利用递推公式有效地计算分配方案,并讨论了递归边界条件与优化策略,旨在帮助读者理解递归思想在解决实际问题中的力量。
题目描述

五个人(A,B,C,D,E)夜间在河边合伙捕鱼,由于太疲倦,大家都睡着了。第二天早上五个人依次醒来。A首先醒来,把鱼平均分成5份,还多1条,就把多余的1条扔回河里,拿着自己的1份回家去了。B醒来后,也把鱼平均分成5份,把多余的1条扔回河里,拿着自己的1份回家。C,D,E依次也都按照同样的办法分鱼。

请问:五个人至少合伙捕到多少条鱼?每个人醒来后看到的鱼的数目各是多少条?


输入



依次输出A,B,C,D,E五个人醒来后看到的鱼的数目,每个一行。

输出

分析:

一道递推题,逆推,设当前鱼为s(n),则s(n+1)=4/5*(s(n)-1),变形,构造新的数列,(逆推),a(n+1)=5/4*a(n)+1,保证数列每一项都能整除4


AC代码如下:

#include "stdio.h"


int main()
{
	int fish[10],i,j,k;
	for (j=4;;j++)//试值
	{
		fish[0]=j; //fish[0]为所有人都走了以后剩下的鱼数
		int count=0; //count记录整数项的数目
		for (i=0;i<5;i++)
		{
			if (fish[i]/4*4==fish[i])
			{
				count++;
			}
			fish[i+1]=5*fish[i]/4+1;
		}
		if (count==5) //满足题目条件,即保证了所有人醒来时看到的鱼都能整除5(此题为逆推,注意其中的转化)
		{
			for (k=i;k>0;k--)
			{
				printf("%d\n",fish[k]);
			}
			
			break;
		}
	}
	return 0;
 }


评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值