您的位置:首页 > 职场人生

斐波那契(面向对象方法实现和规律实现两种方法)

2014-02-15 15:25 302 查看
准备年后跳槽 找了些简单的面试题 练练手

import java.util.ArrayList;
import java.util.List;

public class 斐波拉契 {

public static void main(String[] args) {
        for(int i=1;i<=9;i++){
    //面向对象方法
         System.out.println("第"+i+"个月的兔子数"+new RabbitManager().getAll(i));
         //第二种方法(规律 简单暴力)
         System.out.println("第"+i+"个月的兔子数"+rabbitsMonth(i));
        }  
}

//按照规律来找 比较简单
    //定义三种兔子  一个月大的小兔子  两个月大的中兔子  三个月及以上的大兔子
//小=大+中
//大=中+大
//中=小 
public static int rabbitsMonth(int month){
int a = 0; //大
int b = 0; //中
int c = 1; //小
if(month == 1){
return (a+b+c);
}
for(int i=2;i<=month;i++){
int tempC = c;
c = a + b;
a = a + b;
b = tempC;
}
return (a+b+c);
}

}

class PairRabbit{
// 1 ,2 ,3
private int age;
private List childen = new ArrayList();

public PairRabbit(){
this.age = 1;
}

//生产小兔子的方法
public void makeRabbit(){
PairRabbit rabbit = null ;
if(age<0) return;
switch(age){
   case 1 :
   break;
   case 2 :
   break;
   default:
   rabbit = new PairRabbit();
       if(childen.size()>0){
        for(PairRabbit p : childen){
        p.setAge(p.getAge()+1);
        }
       }
       childen.add(rabbit);
   break;        
}
}

//获取这对兔子的所有孩子的对数
public int getChildNum(){
int childNum = 0;
for(int i=0;i<(age-2);i++){
makeRabbit();
}
childNum = getChilden().size();
return childNum;
}

public int getAge() {
return age;
}

public void setAge(int age) {
this.age = age;
}

public List getChilden() {
for(int i=0;i<(getAge()-2);i++){
makeRabbit();
}
return childen;
}

public void setChilden(List childen) {
this.childen = childen;
}

}

class RabbitManager{
//所有兔子的子孙
List all ;

public RabbitManager(){
all = new ArrayList();
}

//通过第一对兔子获取他所有的子孙兔子  好比根节点获取所有衍生出来的子节点
public void getAllChilden(PairRabbit rp){
List rabbits = rp.getChilden();
all.addAll(rabbits);
if(rabbits.size()>0){    
   for(PairRabbit rp1 : rabbits){
   getAllChilden(rp1);
   }
}
}

//返回所有兔子的数量
public int getAll(int month){
int sum = 0;
PairRabbit rp = new PairRabbit();
rp.setAge(month);
getAllChilden(rp);
sum = all.size()+1;
return sum;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息