我的第一篇博客文章-爱代码爱编程
母牛的故事【Java语言】
题目描述
有一头母牛,它每年年初生一头小母牛。每头小母牛从第四个年头开始,每年年初也生一头小母牛。请编程实现在第n年的时候,共有多少头母牛?
输入
输入数据由多个测试实例组成,每个测试实例占一行,包括一个整数n(0<n<55),n的含义如题目中描述。
n=0表示输入数据的结束,不做处理。
输出
对于每个测试实例,输出在第n年的时候母牛的数量。
每个输出占一行。
样例输入
2
4
5
0
样例输出
2
4
6
思路:往后多推导几天的母牛数量,寻找规律,发现从第四年开始,本年母牛数量是前一年和前三年母牛数量之和,可用数组直接实现,也可用递归调用,但递归在数据量较大时非常耗时,需要谨慎使用
代码实现:
数组方法
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
/**
* 题目:母牛的故事
* 方法:用数组方法计算
*/
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n;
//创建list集合存放结果
List<Integer> list = new ArrayList();
while ((n = sc.nextInt()) != 0) {
list.add(f(n));//调用函数计算出第n天的母牛数量
}
//输出结果
for (Integer i : list) {
System.out.println(i);
}
}
//计算第n天的母牛数量的函数
public static int f(int n) {
int[] a = new int[56];
for (int i = 0; i < n; i++) {
if (i <= 3) {
a[i] = i + 1;
continue;
}
a[i] = a[i - 1] + a[i - 3];//本天母牛数等于前一天母牛数加前三天母牛数量
}
return a[n - 1];
}
}
递归方法
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
/**
* 题目:母牛的故事
* 方法:递归
*/
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n;
//存放结果的集合
List<Integer> list = new ArrayList();
while ((n = sc.nextInt()) != 0) {
list.add(f(n));
}
//输出结果
for (Integer i : list) {
System.out.println(i);
}
}
//计算第n天的母牛数量的递归方法
private static int f(int n) {
//前三年小母牛不生崽
if (n <= 3) {
return n;
} else {
return f(n - 1) + f(n - 3);
}
}
}
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接: https://blog.csdn.net/weixin_42240763/article/details/111106218