• 算法-经典趣题-渔夫捕鱼


    一、问题

    渔夫捕鱼问题是一个典型的递推问题,渔夫捕鱼问题的大意如下:

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



     
  • 相关阅读:
    适用于Java和JavaScript的Codota AI自动完成
    Postgresql常用函数整理
    vue引入echarts地图的三种方式
    Linux下 tar 命令介绍
    如何并发执行Linux命令
    如何复用外部shell脚本
    shell 脚本中日期运算
    有问题找男人帮忙- Linux下man命令
    MySQL 排序规则简介
    再也不用担心 SSH 断开了
  • 原文地址:https://www.cnblogs.com/joshua317/p/15221687.html
Copyright © 2020-2023  润新知