面试题:农夫养牛问题
今天在群中,有人说到这个一个面试题:
一头母牛在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<Cattle> cows = new ArrayList<Cattle>(); // 保存所有当前农夫拥有的牛 private static List<Cattle> cattles = new ArrayList<Cattle>(); 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<cattles.size();++j) { Cattle temp = cattles.get(j); if(temp.getDead()) { cattles.remove(temp); } // 开始只有一头母猪,年龄不生长 if(i>0) { cattles.get(j).grow(); } } // 母牛生小牛 for(int j=0;j<cows.size();++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; } }
作者:Go语言中文网
出处:https://studygolang.com/subject/1
版权声明:转载请附上原文出处链接和本声明。欢迎大家访问Go语言中文网 https://studygolang.com。
微信扫描二维码,关注Go语言中文网,回复「电子书」,免费获取Go语言技术书籍。
出处:https://studygolang.com/subject/1
版权声明:转载请附上原文出处链接和本声明。欢迎大家访问Go语言中文网 https://studygolang.com。
微信扫描二维码,关注Go语言中文网,回复「电子书」,免费获取Go语言技术书籍。