------- android培训、java培训、期待与您交流! ----------
问题:一个农夫养了一头牛,三年后,这头牛每年会生出一头牛,生出来的牛三年后又可以内年生出一头牛....问农夫10年后有多少头牛,n年呢?
java面向对象方式解决:
import java.util.ArrayList; import java.util.List; import java.util.Scanner; /** * 问题:一个农夫养了一头牛,三年后,这头牛每年会生出一头牛,生出来的牛三年后又可以内年生出一头牛....问农夫10年后有多少头牛,n年呢? * * @author liang */ public class Cow {// 定义牛类 private int age = 0;// 定义牛的初始年龄 // 记录牛的年龄,每过一年,牛的年龄加1 public void addAge() { age++; } // 判断是否到了生育年龄 public boolean isCreatCow() { return (age >= 3) ? true : false; } public static void main(String[] args) { List<Cow> cowList = new ArrayList<Cow>(); // 农夫原有的第一头牛 cowList.add(new Cow()); int yearCount;// 年份 // 提示用户输入年份 Scanner scanner = new Scanner(System.in); System.out.print("请您输入牛生长了多少年,输入后按回车可看到牛的数量奥:\n"); yearCount = scanner.nextInt();// 输入年份 for (int i = 1; i <= yearCount; i++) {// 根据输入的年份对牛进行循环计算,每过一年,牛的年龄都增加一岁 int cowNum = cowList.size();// list中有多少行数据,就有几头牛,定义变量,取得list中的行数,即牛的数量 for (int j = 0; j < cowNum; j++) { Cow o = cowList.get(j);// 取出要进行生育的牛 // 每重复取到一头牛时,都意味着根据年份进行了一次新的循环,也就是又过了一年,所以每次新取出一头牛进行生育判断时,都要将这头牛的年龄加1 o.addAge(); // 对牛进行生育判断 if (o.isCreatCow()) { // 如果这头牛到了生育年龄,就让牛生小牛 cowList.add(new Cow()); } } } System.out.println(yearCount + "年后将有<--" + cowList.size() + "-->头牛。"); } }
第二种方式:
public class Cow { public static int count = 0; public Cow(int year) { count++; for (int i = 3 + year; i <= 10; i++) { new Cow(i); } } public static void main(String[] args) { new Cow(0); System.out.println(count); } }
递归方式解决:
public class Cow { static int count = 1; private static void feedCow(int year, int age) { year++; age++; if (year <= 10) { if (age >= 3) { count++; feedCow(year, 0); } feedCow(year, age); } } public static void main(String[] args) { new Cow().feedCow(0, 0); System.out.println(count); } }
动态规划算法算法时间和空间复杂度均为O(n),n为年数:
public class CowBreed {
public static void main(String args[]) {
final int size = 100; // 可以根据需要,设置为所需要计算的最大年限
long[] num = new long[size + 1];
num[0] = num[1] = num[2] = 0;
for (int i = 3; i <= size; ++i) {
num[i] = num[i - 1] + 1 + num[i - 3];
System.out.println("第" + i + "年,牛的数量为:" + (num[i] + 1));
}
}
}
相关推荐
农夫过河问题的算法与实现.doc
问题描述:农夫要带鱼、狗、猫过河到对岸.,有一条船,只能坐一个人,农夫每次只能带一样动物过河,当农夫不在的时侯狗会咬猫,猫会吃鱼.,请问怎么顺序过呢?要求:编写程序,由程序来推出过河的顺序 用Java语言...
主要介绍了Java简单实现农夫过河问题,简单描述了农夫过河问题的概念、原理并结合简单实例形式分析了java解决农夫过河问题的相关操作技巧,需要的朋友可以参考下
主要介绍了基于C++的农夫过河问题算法设计与实现方法,简单描述了农夫过河问题,并结合实例形式详细分析了基于C++实现农夫过河问题的相关算法实现步骤与操作技巧,需要的朋友可以参考下
基于JAVA实现的农夫过河问题
一个农夫养了一头牛,三年后,这头牛每年会生出1头牛,生出来的牛三年后,又可以每年生出一头牛 //……问农夫10年后有多少头牛?n年呢?
主要介绍了Java农夫过河问题的继承与多态实现详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
一个农夫带着一只狼、一只羊和一棵白菜,身处河的南岸。他要把这些东西全部运到北岸。他前面只有一条小船,船只能容下他和一件物品,另外只有农夫才能撑船。如果农夫在场,则狼不能吃羊,羊不能吃白菜,否则狼会吃羊...
自己写的java版本的 人狼羊草问题 关于图的dfs搜索算法
经典的农夫养牛问题,面向对象和递归两种解决方案。
农夫过河的完整代码(农夫、羊、狼和蔬菜安全过河)
一个农夫带着—只狼、一只羊和—棵白菜,身处河的南岸。他要把这些东西全部运到北岸。他面前只有一条小船,船只能容下他和—件物品,另外只有农夫才能撑船。如果农夫在场,则狼不能吃羊,羊不能吃白菜,否则狼会吃羊...
采用深度优先遍历图的方法,解决农夫过河的问题,有代码,有可执行文件和流程图
里面用到了按位相与的算法来判断农夫、狼、羊、白菜的位置,还有在图中寻找路径的算法
2. 农夫和小米问题:农夫、狐狸、鸡和米都在一条河的左岸,现在要把它们全部送到右岸去,农夫有一条船,过河时,除农夫外,船上至多能载狐狸、鸡和米中的一样。狐狸要吃鸡,鸡要吃米,除非农夫在那里。试编程求出...
采用深度优先遍历图的方法,解决农夫过河的问题,有代码,有可执行文件和流程图
农夫过河问题,农夫带着狼,羊,狗,要从此岸到达比岸,该怎样走呢?
用Java语言实现野人过河,有界面,可以设置野人和传教士个数
一农夫带着一头狼,一只羊和一个白菜过河,小船只能一次装载农夫和一样货物,狼会吃羊,羊会吃白菜,只有农夫在时才安全。现欲让所有物品包括农夫都安全过道河对岸,求最佳答案。 状态空间 用16*4的矩阵:a[16][4],...
农夫过河问题在数据结构中有很高的地位,几乎每一本数据结构书都会涉及这个问题