算法一:
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