农夫养牛问题

在 http://polaris.blog.51cto.com/1146394/399738 这里看到了一道数学题:

一头母牛在3—10岁的时候每年可以生一头小牛,生公牛和母牛的比率是50%,在牛12岁的时候就送入屠宰场买了。
 现在有一个农夫有1头1岁大的母牛,在母牛3岁的时候就送到附近的农场去配种,请问40年后这个农夫可能会有多少头牛,
  写出相关的代码或答题思路,最好用面向对象。

下面给出我自己写的代码,如果有不对的还请指正~

牛类,Cow.java:

package test.question.niu;

public class Cow {

	int age;
	char sex;//F母 M公
	char childSex; //最近生下的孩子的性别
	
	public Cow(int age,char sex){
		this.age=age;
		this.sex=sex;
	}

	public char getChildSex() {
		return childSex;
	}

	public void setChildSex(char childSex) {
		this.childSex = childSex;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}

	public int getSex() {
		return sex;
	}

	public void setSex(char sex) {
		this.sex = sex;
	}
	
	
}


农夫类,Farmer.java

package test.question.niu;

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

public class Farmer {

	List<Cow> cowList = new ArrayList<Cow>();
	
	public Farmer(){
		Cow cow = new Cow(1,'F');
		this.cowList.add(cow);
	}
	
	public void addCow(Cow cow){
		this.cowList.add(cow);
	}
}

测试类,Test.java

package test.question.niu;

import java.util.ArrayList;
import java.util.List;
/**
 * 
 * 一头母牛在3—10岁的时候每年可以生一头小牛,生公牛和母牛的比率是50%,在牛12岁的时候就送入屠宰场买了。
 * 现在有一个农夫有1头1岁大的母牛,在母牛3岁的时候就送到附近的农场去配种,请问40年后这个农夫可能会有多少头牛,
 * 写出相关的代码或答题思路,最好用面向对象。
 * */
public class Test {

	public static void main(String args[]){
		int year = 40;
		Farmer farmer = new Farmer();
		for(int i=1;i<=year;i++){ 
			//每一年每头牛都增大一岁
			for(int j=0;i!=1 && j<farmer.cowList.size();j++){
				farmer.cowList.get(j).setAge(farmer.cowList.get(j).getAge()+1);
			}
			int size = farmer.cowList.size(); //牛群的数量
			for(int j=0;j<size;j++){
				Cow cow = farmer.cowList.get(j);
				if(cow.getAge()>=3 && cow.getAge()<=10 && cow.getSex()=='F'){//满足条件才生小牛
					//这里每头母牛交替生公牛、母牛,得到概率50%情况下的数值
					//也可以用(int)Math.round(Math.random())来模拟概率事件,
					char childSex = cow.getChildSex()=='F'?'M':'F';
					cow.setChildSex(childSex); //记录最近生下的牛的性别
					Cow newCow = new Cow(0,childSex);//刚生下来,0岁
					farmer.cowList.add(newCow);
				}else if(cow.getAge()>11){ //大于11岁,卖掉
					farmer.cowList.remove(j);
				}
			}
		}
		
		System.out.println("40年后农夫拥有 "+farmer.cowList.size()+" 头牛");
	}
}






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值