渔夫捕鱼问题是一个典型的递推问题,渔夫捕鱼问题的大意如下:
某天晚上,A、B、C、D、E 5个渔夫合伙捕鱼,捕到一定数量之后便停止捕鱼,各自到岸边休息。第二天早晨,渔夫A第一个醒来,他将鱼分作5份,把多余的一条扔回河中,拿其中自己的一份回家去了。渔夫B第二个醒来,也将鱼分作5份,扔掉多余的一条,拿走自己的一份。渔夫C第三个醒来,也将鱼分作5份,扔掉多余的一条,拿走自己的一份。渔夫D第四个醒来,也将鱼分作5份,扔掉多余的一条,拿走自己的一份。渔夫E第五个醒来,也将鱼分作5份,扔掉多余的一条,拿走自己的一份。问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;
这是一个明显的递推的式子,递推公式如下:
Sn-1=5Sn+1
package com.joshua317;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
// write your code here
int yufa, total;
System.out.println("渔夫捕鱼问题");
Fish fish = new Fish();
Scanner scanner = new Scanner(System.in);
System.out.println("请输入渔夫数量:");
yufa = scanner.nextInt();
total = fish.totalFish(yufa);
System.out.printf("%d个渔夫至少合伙捕鱼数量为%d", yufa, total);
}
}
class Fish {
public int totalFish(int yufu) {
int init;//定义一个初始变量
int i;//循环的次数
int total;//捕鱼的总数
init = yufu + 1;
i = yufu - 1;
total = init;
while (i != 0) {
total = 5 * total + 1;
i--;
}
return total;
}
}
本文为joshua317原创文章,转载请注明:转载自joshua317博客 https://www.joshua317.com/article/76