母牛生小牛问题 简单代码实现思路

题目:一头小母牛,从出生起第四个年头开始每年生一头母牛,按此规律,第20年时有多少头母牛?

无聊做做,当个笔记

这种题目,数学厉害和数据机构学的好的人应该勾出个规律就有大致答案了。智商一般的我想了想java的思路实现:
1、写一个class: 存放增长年龄  (int 型)、 生小牛的年龄 (final int 型)

2、在此类构造方法:参数为int x;  目的是为了初始化母牛年龄。

3、可以用两个集合来存取母牛和生下来的小牛的数量 listA   listB

4、循环20年 再子循环母牛的头数 如果存放的增长年龄大于等于4年(也就是生小牛的年龄) 则listB.add(class的构造方法(0))  得到小牛的数量

5、最后listA.addAll(listB) 得到20年后的数量



/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		//一头小母牛,从出生起第四个年头开始每年生一头母牛,按此规律,第20年时有多少头母牛?
		Test1 t = new Test1();
		System.out.println(t.getAll(20));
				
	}
public static int getAll(int year){
		List<A> listA = new ArrayList<A>();	//母牛数
		List<A> listB = new ArrayList<A>();	//母牛生下来的小母牛
		//假如现在就第四年 开始生了
		listA.add(new A(4));	//有一头母牛能生(满了4年了)
		
		for(int i=0;i<year;i++){	//在20年之内的总和
			listB.clear();
			for(int j=0;j<listA.size();j++){	//把j只母牛++
				A a = listA.get(j);
				//如果这只母牛的年龄有4年了,循环20年每年大一岁
				a.setAgemu(a.getAgemu()+1);
				if(a.validata()){
					listB.add(new A(0));	//增加一只小母牛
				}
			}
			
			listA.addAll(listB);
		}
		return listA.size();
	}

class A{
	private final int age =4;	//固定4年
	private int agemu;	//递增的年数
	
	public A(int a){
		agemu = a;
	}
	
	public boolean validata(){
		if(agemu>age){
			return true;
		}
		return false;
	}
	
	public int getAgemu() {
		return agemu;
	}
	public void setAgemu(int agemu) {
		this.agemu = agemu;
	}
	
	
	
	
	
}

你可能感兴趣的:(代码)