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

xiaoxiao2021-02-28  49

                                 渔夫捕鱼

某天晚上,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; } }

转载请注明原文地址: https://www.6miu.com/read-2626609.html

最新回复(0)