`

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  
恩,重构的很好,比我的方便简单。

相关推荐

    javacv-platform-1.5.4.zip

    JavaCV的主要目标是简化Java开发者在计算机视觉领域的编程工作,使其能够轻松地调用C++和C实现的高效算法。在`javacv-platform-1.5.4`中,可能包含以下关键组件: 1. **OpenCV**: OpenCV是一个广泛使用的开源计算机...

    javacv-platform-1.3-bin.zip

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

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

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

    java实现国密算法gm-java-main.zip

    java实现国密算法gm-java-main.zip

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

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

    Java排列组合算法 - 郭睿的专栏 - CSDN博客

    Java排列组合算法 - 郭睿的专栏 - CSDN博客Java排列组合算法 - 郭睿的专栏 - CSDN博客

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

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

    Java版-剑指offer数据结构与算法 视频教程 下载 百度网盘链接2.zip

    压缩包内的"Java版-剑指offer数据结构与算法 视频教程 下载 百度网盘链接2.txt"文件很可能是提供视频教程的下载链接,通过观看这些视频,学习者可以直观地了解如何在Java环境中实现和应用各种数据结构和算法,同时...

    K-Means算法--Java实现

    在Java中实现K-Means算法,我们需要理解以下几个核心步骤和相关概念: 1. **初始化**:首先,我们需要选择K个初始质心(centroid),通常是随机选取数据集中的K个点作为初始中心。这些质心将成为簇的代表。 2. **...

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

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

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

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

    银行家算法-java语言

    银行家算法-java语言

    JAVA---算法与数据结构

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

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

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

    sun-java6-jdk

    【标题】"sun-java6-jdk" 是Oracle公司(前身为Sun Microsystems)为Java开发环境提供的一个关键组件,它包含了Java Development Kit(JDK),是Java编程语言的基础工具集。这个压缩包文件提供了用于开发、编译、...

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

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

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

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

    java k-means可视化程序

    总之,Java K-Means可视化程序结合了数据处理、机器学习算法和图形用户界面设计,为理解和应用K-Means提供了一个实用的工具。通过深入研究这个程序,不仅可以掌握K-Means算法,还能提升Java编程和数据可视化的技能。

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

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

Global site tag (gtag.js) - Google Analytics