`

java算法----农夫和牛

    博客分类:
  • java
 
阅读更多
问题:一个农夫养了一头牛,三年后,这头牛每年会生出一头牛,生出来的牛三年后又可以每年生出一头牛....问农夫10年后有多少头牛,n年呢?

算法一:
package com.test;

public class AlgorithmOne {
	/**
	 * 动态规划算法
	 * @param args
	 * 数组num中存储的是新生的牛的数目,这里的新生表示除了最开始的一头牛外的所有其他牛
	 * 例如:num[3]表示到第3年来新生的牛的数目
	 * num[i] = num[i-1]+num[i-3]+1;
	 * 上面的式子表示:第i年的新牛数目为第i-1年的新牛数目加上第i-3年的新牛数目(因为第i-3年的牛仔第i年就会生小牛了),
	 * 再加上最开始的那头牛在第i年也会生出一头牛
	 */
	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]+num[i-3]+1;
			System.out.println("第"+i+"年,牛的数量:"+(num[i]+1));
		}
	}
}



算法二:

package com.bean;

public class Cow {
	
	private int age = 0;
	
	public void addAge(){
		age++;
	}

	public boolean isCreatCrow(){
		return (age>=3)? true:false;
	}
}



package com.test;

import java.util.ArrayList;
import java.util.List;

import com.bean.Cow;

public class AlgorithmTwo {

	public static void main(String[] args) {
		List<Cow> cowList = new ArrayList<Cow>();
		cowList.add(new Cow());
		int yearCount = 10;
		
		for(int i =1;i<=yearCount;i++){
			int cowNum = cowList.size();
			
			for(int j=0;j<cowNum;j++){
				Cow cow = cowList.get(j);
				cow.addAge();
				if(cow.isCreatCrow()){
					cowList.add(new Cow());
				}
			}
		}
		System.out.println(yearCount+"年后将有"+cowList.size()+"头牛");
	}
}



算法三:

package com.test;

public class AlgorthmThree {
	
	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 AlgorthmThree().feedCow(0, 0);
		System.out.println(count);
	}

}



算法四:
package com.bean;

public class CowBean {
	
	public static int count = 0;
	
	/**
	 * 算法核心:该算法计算每头牛包括其后代在这10年内能生了多少小牛
	 * @param year
	 * 每new一次CowBean就会执行count++
	 */
	public CowBean(int year){
		count ++;
		for(int i =3+year;i<=10;i++){
			new CowBean(i);
		}
	}
	
	public static void main(String[] args) {
		new CowBean(0);
		System.out.println(count);
	}

}



转载连接:http://hechuanzhen.iteye.com/blog/1845173
分享到:
评论
2 楼 yangjianzhouctgu 2013-04-12  

中国凉茶 写道
恩,重构的很好,比我的方便简单。


这个程序就是您的,有些难懂得地方,我用自己的想法加了注释
1 楼 中国凉茶 2013-04-12  
恩,重构的很好,比我的方便简单。

相关推荐

    二维矩形装箱算法--二叉树--java实现

    在Java实现中,`BaseBoxChoose.java`可能包含了装箱算法的基本策略或基类,定义了装箱选择的接口和通用方法。`Slaves.java`可能是处理并行计算的部分,利用多线程并行处理多个箱子的装车问题,提高算法执行效率。`...

    谷歌java格式-重新格式化 Java 源代码以符合 Google Java 风格

    google-java-format是一个重新格式化 Java 源代码以符合 Google Java Style的程序。 使用格式化程序 从命令行 下载格式化程序 并运行它: java -jar /path/to/google-java-format-${GJF_VERSION?}-all-deps.jar ...

    javacv-platform-1.5.3-bin.zip

    JavaCV(Java Computer Vision)是一个基于Java的计算机视觉库,它为Java开发者提供了一套方便的接口和工具,使得他们能够更容易地访问和利用OpenCV、FFmpeg等库。JavaCV平台1.5.3版本的发布,为开发者带来了最新的...

    java-string-similarity, 各种字符串相似性和距离算法.zip

    java-string-similarity, 各种字符串相似性和距离算法 java-string-similarity 实现不同字符串相似度和距离度量的库。 目前已经实现了许多算法( 包括Levenshtein编辑距离和 sibblings,jaro winkler,最长公共子序列...

    Java代码-排序-直接插入排序、希尔排序、直接选择排序、冒泡排序、堆排序、快速排序、归并排序中部分排序以及算法-贪心法

    Java代码-排序-直接插入排序、希尔排序、直接选择排序、冒泡排序、堆排序、快速排序、归并排序中部分排序以及算法-贪心法,大家可以将源码下载下来进行学习,附带着注释和解释,有不理解的可以找博主一起探讨,共同...

    皮尔逊算法--java 和python 版

    这个压缩包文件包含了皮尔逊算法的Java和Python实现版本,意味着我们可以用这两种流行的编程语言来计算两个变量之间的相关性。 皮尔逊相关系数的计算基于协方差和标准差,公式如下: \[ r = \frac{\sum{(x_i - \bar...

    kr iging插值算法java实现-Java代码类资源

    kr iging插值算法java实现-Java代码类资源

    javacv-platform-1.3-bin.zip

    首先,OpenCV是JavaCV的核心部分,它是一个广泛使用的计算机视觉库,包含了众多图像处理和计算机视觉算法。在JavaCV 1.3中,你可以找到用于图像处理、特征检测、对象识别、人脸识别等功能的API。例如,高斯模糊、...

    算法 - Java-所有算法均用 Java 实现

    算法 - Java Build Discord chat Gitpod ready-to-code Open in Gitpod 您可以运行和编辑算法,或者只需单击一下即可使用 Gitpod.io(免费的在线开发环境)为算法做出贡献。 算法: 我们的目录包含完整的应用程序...

    Lzma压缩文件算法-java单文件版

    Lzma压缩文件算法-java单文件版,编译直接通过,压缩率极高

    数据结构与算法--Java语言描述

    学习“数据结构与算法--Java语言描述”,不仅能够理解各种数据结构的内部工作原理,还能学会如何用Java来实现它们,这对于软件开发、系统分析和算法竞赛等领域都有极大的帮助。通过深入学习和实践,我们不仅可以提升...

    JAVA---算法与数据结构

    在"JAVA---算法与数据结构"这个主题中,我们将深入探讨Java中常用的数据结构,如数组、链表、栈、队列、集合、映射、树(二叉树、红黑树)和图等。每种数据结构都有其独特的优势和适用场景,例如,数组适合随机访问...

    NSGA-III算法-matlab版本-写满了中文注释

    这是从mathwork上下载的NSGA-3的代码,自己写的...就是希望能和大家一起讨论交流一下,希望大家指正。希望弄懂代码的小伙伴能回帖说一下自己的理解。也希望能解答一下我不懂的地方。  这里把原代码的链接也发一下。...

    详解Java实现的k-means聚类算法

    Java实现的k-means聚类算法详解 k-means聚类算法是一种常用的无监督学习算法,用于对数据...Java实现的k-means聚类算法是一种常用的数据分析工具,能够帮助数据分析师和数据科学家发现隐藏在数据背后的规律和模式。

    牛牛算法java版,包含牛牛算法 结算配置自定义等,里面有测试类

    包含牛牛算法 结算配置自定义等,里面有测试类,包含牛牛算法 结算配置自定义等,里面有测试类包含牛牛算法 结算配置自定义等,里面有测试类包含牛牛算法 结算配置自定义等,里面有测试类包含牛牛算法 结算配置自定义...

    北京工业大学--算法作业4--回溯算法--任务分配--Java

    北京工业大学--算法作业4--回溯算法--任务分配--Java 有n份作业分配给n个人去完成,每人完成一份作业。假定第i个人完成第j份作业需要花费cij时间, cij&gt;0,1≦i,j≦n。试设计一个回溯算法,将n份作业分配给n个人完成...

    高级算法-nju-onlineJudge-master-java和python的答案

    在本资源中,“高级算法-nju-onlineJudge-master-java和python的答案”主要涵盖了计算机科学领域中的高级算法,并且提供了针对NJU(南京大学)在线评测系统onlineJudge的解答,包括Java和Python两种编程语言的实现。...

    CRC16,CRC-CCITT JAVA算法

    CRC16,CRC-CCITT JAVA算法

    Java数据结构和算法-第二版-高清扫描版-带目录书签

    《Java数据结构和算法》第二版是一本深入探讨Java编程中数据结构与算法的权威书籍。这本书涵盖了在软件开发中至关重要的基础知识,旨在帮助程序员提升解决问题的能力和代码效率。高清扫描版提供了清晰的文本和图表,...

    神经网络算法与实现-基于Java语言.zip

    神经网络算法与实现-基于Java语言神经网络算法与实现-基于Java语言神经网络算法与实现-基于Java语言神经网络算法与实现-基于Java语言神经网络算法与实现-基于Java语言神经网络算法与实现-基于Java语言神经网络算法与...

Global site tag (gtag.js) - Google Analytics