母牛生小牛的问题

zh2656959 2012-04-28 09:34:31
农场一头老母牛,每年生头小母牛,母牛5岁生母牛,二十年上多少牛。请用面向对象的思维来做这道题
...全文
1976 44 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
44 条回复
切换为时间正序
请发表友善的回复…
发表回复
gaobaiy 2013-08-04
  • 打赏
  • 举报
回复
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();
	}
}
gaobaiy 2013-08-04
  • 打赏
  • 举报
回复
无聊,写个

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();
	}
}
liuliutengteng 2013-08-01
  • 打赏
  • 举报
回复
#include<iostream> using namespace std; void main() { int a[20]; int i; for(i=0;i<5;i++) { a[i]=1; } for(i=5;i<20;i++) { a[i]=a[i-1]+a[i-3]; } cout<<a[19]<<endl; }
liuliutengteng 2013-08-01
  • 打赏
  • 举报
回复
#include<iostream> using namespace std; void main() { int a[20]; int i; for(i=0;i<5;i++) { a[i]=1; for(i=5;i<20;i++) { a[i]=a[i-1]+a[i-3]; } cout<<a[19]<<endl; }
liuliutengteng 2013-08-01
  • 打赏
  • 举报
回复
a[n]=a[n-1]+a[n-4];
nj_dobetter 2013-08-01
  • 打赏
  • 举报
回复
Cow(){ static List list; int age = 0; Cow(){ addCow(this); } void incAge(){ age++; if(age >=5){ new Cow(); } } static void addCow(Cow cow){ list.add(cow); } }
Zemo 2013-07-29
  • 打赏
  • 举报
回复
母牛好忙╮(╯▽╰)╭
w_seons1s_w 2013-07-29
  • 打赏
  • 举报
回复
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.
junko2012kao 2013-07-17
  • 打赏
  • 举报
回复
看了评论,有些大神,有些纯属捣蛋。
zqfddqr 2013-07-16
  • 打赏
  • 举报
回复
引用 1 楼 ldh911 的回复:
从生物学的角度出发,单性繁殖难度很大。
哈哈 斐波那契数列么 一搜一大堆 http://blog.csdn.net/zqfddqr/article/details/5553661
程序员向西 2013-07-16
  • 打赏
  • 举报
回复
引用 32 楼 yjjy0921 的回复:
[quote=引用 29 楼 r4141496091 的回复:] 计算结果是:cow number is:325
哦,应该是431,应该用farm.timePast(20);[/quote] 嗯,我这算出来也是431~挺有意思的问题!
「已注销」 2013-07-15
  • 打赏
  • 举报
回复
结果加上1就行了吧,牛们时没有乱伦这回事的,一头公牛足以。除非这公牛撑不到二十年。
阿飞的蝶 2013-07-15
  • 打赏
  • 举报
回复
引用 29 楼 r4141496091 的回复:
计算结果是:cow number is:325
哦,应该是431,应该用farm.timePast(20);
  • 打赏
  • 举报
回复
没有公牛,怎么生?难道的克隆??????
xiazdong 2013-07-06
  • 打赏
  • 举报
回复
类似Fibonacci思路做,用递推式...
r4141496091 2013-07-06
  • 打赏
  • 举报
回复
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());
	}
}
摆烂办不到 2013-07-06
  • 打赏
  • 举报
回复
楼上都牛人啊
阿飞的蝶 2013-07-03
  • 打赏
  • 举报
回复
母牛类:
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
hzieelei00lei 2012-12-07
  • 打赏
  • 举报
回复
package com.gudii.countcow; public class Cow { private int age = 0; private final int bemumage=5; public boolean CanHaveBaby(int age){ return (age>=bemumage); } public void setAge(int age) { this.age = age; } public int getAge() { return age; } } ------ package com.gudii.countcow; import java.util.ArrayList; public class CowHouse { public static void main(String[] args) { ArrayList<Cow> mumcow=new ArrayList<Cow>(); Cow mcow =new Cow(); mcow.setAge(5); mumcow.add(mcow); ArrayList<Cow> childcow=new ArrayList<Cow>(); for(int i=0;i<1;i++){ for(int j=0;j<mumcow.size();j++){ //拿出每头母牛 Cow mc = mumcow.get(j); mc.setAge(mc.getAge() + 1); if(mc.CanHaveBaby(mc.getAge())){ Cow ccow =new Cow(); childcow.add(ccow); } } mumcow.addAll(childcow); childcow.clear(); } System.out.println("count =" + mumcow.size() ); mumcow.clear(); } }
黑石课堂 2012-12-07
  • 打赏
  • 举报
回复
估计二十年要至少二十次吧。 至于上多少头牛就看有多少头公牛了。。
加载更多回复(24)

62,635

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧