黑马程序员技术交流社区

标题: 不死神兔的题可不可以采用直接的思想做? [打印本页]

作者: flying81621    时间: 2017-2-25 23:02
标题: 不死神兔的题可不可以采用直接的思想做?
题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?
程序分析: 兔子的规律为数列1,1,2,3,5,8,13,21....
public class lianxi01 {
public static void main(String[] args) {
System.out.println("
1个月的兔子对数:    1");
System.out.println("
2个月的兔子对数:    1");
int f1 = 1, f2 = 1, f, M=24;
     for(int i=3; i<=M; i++) {
      f = f2;
      f2 = f1 + f2;
      f1 = f;
      System.out.println("
" + i +"个月的兔子对数:"+f2);
         }
}
}
这是标准解法,但这是根据结果找规律来做的,现在可不可以采用直接的思想来做,直接根据兔子生兔子的规律来做它?


作者: flying81621    时间: 2017-2-25 23:15
自己顶一下
作者: 香草芭芙    时间: 2017-2-26 14:01
[Java] 纯文本查看 复制代码
import java.util.ArrayList;
import java.util.ListIterator;

class Tuzi {

    /**
     * 0个月 - 小兔子 1个月 - 大兔子 2个月 - 生小兔子
     */
    public int age;
}

public class Test07 {

    public static void main(String[] args) {

        ArrayList<Tuzi> arrayList = new ArrayList<Tuzi>();
        Tuzi tuzi1 = new Tuzi();
        Tuzi tuzi2 = new Tuzi();
        arrayList.add(tuzi1);
        arrayList.add(tuzi2);
        int num = 12; // 12个月
        for (int i = 0; i < num; i++) {
            for (ListIterator<Tuzi> listIterator = arrayList.listIterator(); listIterator.hasNext();) {
                Tuzi tuzi = listIterator.next();
                if (tuzi.age > 1) {
                    listIterator.add(new Tuzi());
                }
            }
            for (Tuzi tuzi : arrayList) {
                tuzi.age++;
            }
        }
        /** 一年内繁殖成多少对兔子? */
        System.out.printf("一共%d只兔子\n", arrayList.size());
        System.out.printf("一年内繁殖成%d对兔子\n", arrayList.size() / 2);
    }
}





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2