您的位置:首页 > 其它

备战蓝桥杯——算法经典趣题(渔夫捕鱼)递归,递推,循坏算法

2018-02-18 18:04 399 查看

                                 渔夫捕鱼

某天晚上,A,B,C,D,,E,5个渔夫合伙捕鱼,捕到一定数量之后就停止捕鱼,各自到岸边休息
。第一天早晨,渔夫A第一个醒来,他将鱼分作5份,把多余的一条仍会河中,
拿到其中自己的一份回家去了。渔夫B第二个醒来,也讲鱼分作5份,扔掉多余的一条,拿走
自己的一份。渔夫C第二个醒来,也讲鱼分作5份,扔掉多余的一条,拿走
自己的一份。渔夫D第二个醒来,也讲鱼分作5份,扔掉多余的一条,拿走
自己的一份。渔夫E第二个醒来,也讲鱼分作5份,扔掉多余的一条,拿走
自己的一份。问:这个渔夫至少捕到了多少条鱼?


 分析:每个渔夫醒来的时候,鱼的数量应该是5的倍数再加1
假设,最后一个渔夫E醒来之后,鱼的数量应该至少是6
,在他扔掉一条鱼之后,任然可以平均分5分
 那么渔夫D醒来应该:6*5+1=31  条鱼
    渔夫C醒来应该:31*5+1=156 条鱼
    渔夫B醒来应该:156*5+1=781 条鱼

    渔夫A醒来应该:781*5+1=3906条鱼

这道题目其实非常简单,我用了3中不同的算法:分别是递推,递归,循坏

public class P10_9 {

public static void main(String[] args) {

int s=0;
int n=4;
int b=6;

for(;;) //使用循坏的方法
{
if(n!=0){ b=b*5+1; }
n--;
if(n==0){ break;}
}
System.out.println(f(5)); //--递归调用
System.out.println(b); //--使用循坏
System.out.println(fish(5)); //递推
}
public static int f(int n) //递归算法
{
int s=0;
if(n==1) return 6;

return f(n-1)*5+1;
}
public static int fish(int yufu) //递推算法
{
int init;
int n;
int s;

init=yufu+1;
n=yufu-1;

s=init; //开始的时候s是等于6
while(n!=0)
{
s=5*s+1;
n--;
}
return s;

}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: