算法设计与分析实验四:分治算法(java实现)、母牛的故事

实验四:使用分治算法解决母牛的故事

一、实验目的

练习使用分治算法解决实际问题(使用Java语言实现)。

二、实验内容

【问题描述】
有一头母牛,它从第二年开始每年年初生一头小母牛。每头小母牛从第四个年头开始,每年年初也生一头小母牛。请编程实现在第n年的时候,共有多少头母牛?
【输入】
输入数据由多个测试实例组成,每个测试实例占一行,包括一个整数n(0<n<55),n的含义如题目中描述。n=0表示输入数据的结束,不做处理。
【输出】
对于每个测试实例,输出在第n年的时候母牛的数量。
每个输出占一行。
【样例输入】

  2
  4
  5
  0

【样例输出】

  2
  4
  6  

三、主要思路

每只小牛会在第四年开始生小牛,所以第n年牛的总数为第n-1年的牛的数加上第n-3年牛的数量。由此可得递推式 f ( n ) = f ( n − 1 ) + f ( n − 3 ) f(n)=f(n-1)+f(n-3) f(n)=f(n1)+f(n3)
为了避免重复计算,使用一个数组存放之前计算过的结果,并将年数记为count。如果需要求的n<=count,则直接从数组中获取结果;如果n>count,则使用递推式计算结果,并将结果存入数组中。

四、程序代码

Cow.java

package Cows;

import java.util.Scanner;

public class Cow {
    
    
    private int cowNums[] =new int[56];
    private int count;
    Cow(){
    
    
        cowNums[1]=1;
        cowNums[2]=2;
        cowNums[3]=3;
        this.count=3;
    }
    public void totalFunciton(){
    
    
        Scanner sc=new Scanner(System.in);
        int n=sc.nextInt();
        while(n!=0){
    
    
            int res=solve(n);
            output(res);
            n=sc.nextInt();
        }
    }
    public int solve(int n){
    
    
        if(n<=count){
    
    
            return cowNums[n];
        }
        else {
    
    
            while (n > count) {
    
    
                count++;
                cowNums[count] = cowNums[count - 1] + cowNums[count - 3];
            }
            return cowNums[n];
        }
    }
    public void output(int n){
    
    
        System.out.println(n);
    }
}

Test.java

package Cows;

public class Test {
    
    
    public static void main(String[] args) {
    
    
        Cow cow=new Cow();
        cow.totalFunciton();
    }
}

五、运行结果

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/a1016249126/article/details/121282993