昨天面试一家游戏开发公司,有一道面试题特别有意思,但是当时没有写出来,回来仔细研究后终于写出来了!所以分享一下!
题目:
一只牛4岁开始生产,12岁停止生产,一年产1头,产下的母牛概率为50%,15岁送入屠宰场,现有一只1岁母牛,请问25年后有多少只牛?
当时看到面试题上有之前面试的人写的“递归”两个字,然后...就入坑了,回来仔细研究后发现根本跟递归就没有一毛钱关系!
下面贴出我自己写出的代码:
牛的实现类及方法:
package entity;
import java.util.Random;
/**
* 牛
* @author 土豆丝
* @date 2018年5月15日
*
*/
public class Cattle {
/**
* 性别(0:母牛 1:公牛)
*/
public int sex;
/**
* 年龄
*/
public int age;
public int getSex() {
return sex;
}
public void setSex(int sex) {
this.sex = sex;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "Cattle [sex=" + sex + ", age=" + age + "]";
}
/**
* 生产
*/
public Cattle production(Cattle cattle){
if(cattle.getSex()==0 && 4<cattle.getAge() && cattle.getAge()<=14){
Random rand = new Random();
Cattle c = new Cattle();
if(rand.nextInt(100)>50){
c.sex = 1;
}
c.age = 1;
return c;
}
return null;
}
/**
* 死亡
*/
public Boolean die(Cattle cattle){
if(cattle.age >= 20){
return true;
}
return false;
}
}
执行:
package main;
import java.util.ArrayList;
import java.util.List;
import entity.Cattle;
/**
* 牛
* @author 土豆丝
* @date 2018年5月15日
*
*/
public class run {
public static void r(){
//创建母牛
Cattle c = new Cattle();
c.setAge(1);
c.setSex(0);
//储存牛的集合
List<Cattle> lc = new ArrayList<Cattle>();
//将母牛放入牛的集合
lc.add(c);
for(int i=0;i<26;i++){
for(int j=0;j<lc.size();j++){
//生产方法
Cattle ca = c.production(lc.get(j));
//如果牛符合生产要求
if(ca != null){
lc.add(ca);
}
//牛符不符合进入屠宰场的要求
Boolean b = c.die(lc.get(j));
if(b){
lc.remove(j);
}else{
lc.get(j).setAge(lc.get(j).getAge()+1);
}
}
}
System.out.println("农场中牛的数量:"+lc.size());
}
public static void main(String[] args) {
//执行
r();
}
}
结论:这道题考察的是对面向对象的理解,如果对面向对象理解较为深入的话这道题应该就是小玩意!这道题应该还有更加简洁,更加有效率的解决方案,求大佬回复我!本人QQ:2367908901 在此谢过