java的农夫养牛_面试题:农夫养牛问题

本文介绍了面试题中的农夫养牛问题,详细解析了如何使用Java编写代码来模拟40年后农夫可能拥有的牛的数量。问题涉及到母牛的生育能力和寿命,以及面向对象的编程思想。通过创建Cattle类并进行迭代计算,最终得出答案。
摘要由CSDN通过智能技术生成

今天在群中,有人说到这个一个面试题:

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

polaris将代码(Java实现)写了一下,如有不对的地方欢迎指出。同时也欢迎您给出自己的解法。

package com.polaris.test;

import java.util.*;

/**

* 问题描述:

*

* 一头母牛在3—10岁的时候每年可以生一头小牛,生公牛和母牛的比率是50%,

* 在牛12岁的时候就送入屠宰场买了。现在有一个农夫有1头1岁大的母牛,

* 在母牛3岁的时候就送到附近的农场去配种,请问40年后这个农夫可能会有多少头牛,

* 写出相关的代码或答题思路,最好用面向对象。

* @author polaris http://www.beijixing001.com

* @version 1.0

*/

public class ComputeCattleNum {

// 保存所有母牛

private static List cows = new ArrayList();

// 保存所有当前农夫拥有的牛

private static List cattles = new ArrayList();

public static void main(String[] args) {

// 第一头母牛

Cattle cow = new Cattle(0,3);

cows.add(cow);

// 40年

for(int i=0;i<40;++i) {

// 大于等于12岁的牛送到屠宰场卖掉;同时每年,所有的牛

for(int j=0;j

Cattle temp = cattles.get(j);

if(temp.getDead()) {

cattles.remove(temp);

}

// 开始只有一头母猪,年龄不生长

if(i>0) {

cattles.get(j).grow();

}

}

// 母牛生小牛

for(int j=0;j

Cattle calf = cows.get(j).bear();

if(calf!=null) {

if(calf.getSex()==0)

cows.add(calf);

cattles.add(calf);

}

}

}

System.out.println("40年后农夫拥有" + cattles.size() + "头牛");

}

}

class Cattle {

// 牛的雌雄:0代表雌,1代表雄

private int sex;

// 牛的年龄

private int age;

// 是否卖掉(已死)

private boolean dead = false;

public Cattle(int sex, int age) {

this.sex = sex;

this.age = age;

}

/**

* 生小牛

* @return 生出的小牛

*/

public Cattle bear() {

Cattle calf = null;

if(this.sex==0) {

if(this.age>=3 && this.age<=10) {

calf = new Cattle(random(),0);

} else {

//System.out.println("抱歉,此牛太小或太老,不能生育。");

}

} else {

//System.out.println("有没有搞错,公牛也想让它生小牛?");

}

return calf;

}

private int random() {

return (int)Math.round(Math.random());

}

/**

* 长大一岁,如果当前大于等于12岁,则卖掉

*/

public void grow() {

if(this.age>=12) dead = true;

else this.age++;

}

public int getSex() {

return this.sex;

}

public boolean getDead() {

return this.dead;

}

}

点击此处获得ComputeCattleNum.java类文件

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值