zoukankan      html  css  js  c++  java
  • 面试题:农夫养牛问题

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

    一头母牛在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;
    	}
    }
    
    点击此处获得ComputeCattleNum.java类文件

    作者:Go语言中文网
    出处:https://studygolang.com/subject/1
    版权声明:转载请附上原文出处链接和本声明。欢迎大家访问Go语言中文网 https://studygolang.com。
    微信扫描二维码,关注Go语言中文网,回复「电子书」,免费获取Go语言技术书籍。
  • 相关阅读:
    文件传输-一个大文件传输
    日志模块-logging模块
    加密模块hashlib
    面向对象进阶-反射
    面向对象
    模块和包
    作业-学生管理系统
    Java 链表反转
    Haoop MapReduce 的Partition和reduce端的二次排序
    Hadoop 笔记1 (原理和HDFS分布式搭建)
  • 原文地址:https://www.cnblogs.com/polaris1119/p/1839888.html
Copyright © 2011-2022 走看看