62,635
社区成员




public class Test1 {
public static void main(String[] args) {
Farm f = new Farm();
for (int i = 1; i < 21; i++) {
f.live(Cow.GIVE_BIRTH_CYCLE);
}
System.out.println(f.getCowsCount() - 1);
}
}
class Cow {
public final static int GIVE_BIRTH_CYCLE = 1;//生育周期
public final static int GIVE_BIRTH_START = 5;//开始生育年龄
private int age = 0;
public Cow(int age) {
this.age = age;
}
public void live(int cycle) {
this.age += cycle;
}
public Cow giveBirth() {
if (this.age >= GIVE_BIRTH_START) {
return new Cow(0);
}
return null;
}
}
class Farm {
private List<Cow> cows = new ArrayList<Cow>();
public Farm() {
this.cows.add(new Cow(Cow.GIVE_BIRTH_START));
}
public void live(int cycle) {
List<Cow> calfs = new ArrayList<Cow>();
Cow calf = null;
for (Cow cow : this.cows) {
cow.live(cycle);
calf = cow.giveBirth();
if (calf != null) {
calfs.add(calf);
}
}
addAllCow(calfs);
}
public void addAllCow(List<Cow> cow) {
this.cows.addAll(cow);
}
public int getCowsCount() {
return cows.size();
}
}
public class Test1 {
public static void main(String[] args) {
Farm f = new Farm();
for (int i = 1; i < 21; i++) {
f.live(Cow.GIVE_BIRTH_CYCLE);
}
System.out.println(f.getCowsCount() - 1);
}
}
class Cow {
public final static int GIVE_BIRTH_CYCLE = 1;//生育周期
public final static int GIVE_BIRTH_START = 5;//开始生育年龄
private int age = 0;
public Cow(int age) {
this.age = age;
}
public void live(int cycle) {
this.age += cycle;
}
public Cow giveBirth() {
if (this.age >= GIVE_BIRTH_START) {
return new Cow(0);
}
return null;
}
}
class Farm {
private List<Cow> cows = new ArrayList<Cow>();
public Farm() {
this.cows.add(new Cow(Cow.GIVE_BIRTH_START));
}
public void live(int cycle) {
List<Cow> calfs = new ArrayList<Cow>();
Cow calf = null;
for (Cow cow : this.cows) {
cow.live(cycle);
calf = cow.giveBirth();
if (calf != null) {
calfs.add(calf);
}
}
addAllCow(calfs);
}
public void addAllCow(List<Cow> cow) {
this.cows.addAll(cow);
}
public int getCowsCount() {
return cows.size();
}
}
public static void main(String[] args) {
List<Cow> cows = new ArrayList<Cow>();
Cow oldCow = new Cow(6);
cows.add(oldCow);
for(int i =1;i<=20;i++){
for(int j =0;j<cows.size();j++){
Cow tempCow = cows.get(j);
if(tempCow.getAge()>5){
Cow newCow = new Cow(1);
cows.add(newCow);
}
cows.get(j).setAge(tempCow.getAge()+1);
}
}
System.out.println(cows.size());
}
外加一个Cow类。
请问我这算法有问题吗。。
结果是431.import java.util.List;
public class 母牛 {
public 母牛(int 年龄) {
super();
this.年龄 = 年龄;
}
@Override
public String toString() {
return "母牛 [年龄=" + 年龄 + "]";
}
private int 年龄 = 0;
public void 长大一岁() {
年龄 += 1;
}
public int 今年几岁() {
return 年龄;
}
public 母牛 MakeSubCow() {
return new 母牛(0);
}
}
import java.util.ArrayList;
import java.util.List;
public class 大农场 {
public static void main(String[] args) {
开始运作农场();
}
public static void 开始运作农场() {
List<母牛> 牛总数 = new ArrayList<母牛>();
// 默认是个大母牛
牛总数.add(new 母牛(10));
for (int i = 0; i < 20; i++) {
for (母牛 牛牛 : 牛总数) {
牛牛.长大一岁();
}
List<母牛> temp = new ArrayList<母牛>();
for (母牛 牛牛 : 牛总数) {
if (牛牛.今年几岁() >= 5) {
temp.add(牛牛.MakeSubCow());
}
}
牛总数.addAll(temp);
}
System.out.println(牛总数.size());
}
}
package com.cw.farm;
public class Cow {
private int age;
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public Cow(int age){
this.age = age;
}
public void grow(){
this.age++;
}
/*
* 母牛生小牛
*/
public Cow reproduced(){
/*
* 如果母牛年龄大于等于5就返回一个0岁的小母牛,否则返回空
*/
if(this.age>=5){
return new Cow(0);
}else{
return null;
}
}
}
农场类:
package com.cw.farm;
import java.util.ArrayList;
import java.util.List;
public class Farm {
/**
* @param cows 用来存放所有的牛的集合
* @param children 用来暂时存放每一年产生的小母牛
*/
List<Cow> cows = new ArrayList<Cow>();
List<Cow> children = new ArrayList<Cow>();
/**
*
* @param year 指明第几年后
*/
public void timePast(int year){
for(int i=0;i<year;i++){
for(Cow c :cows){
c.grow(); //年龄增长函数
//如果本年度该母牛可以生牛,就把所生的小母牛添加到children集合中
if(c.reproduced()!=null){
children.add(c.reproduced());
}
}
cows.addAll(children);
children.clear();
}
}
public static void main(String[] args) {
Farm farm = new Farm();
Cow cow = new Cow(5);
farm.cows.add(cow);
farm.timePast(19);
System.out.println("cow number is:"+farm.cows.size());
}
}
计算结果是:cow number is:325