Назад | Начало урока | Вперед
Содержание

Глава 5

Задача 5.6 "Кролики!"

Одна любительница домашних животных обожает кроликов. Исходя из площади, необходимой для проживания одного кролика, она подсчитала, что в ее новом доме хватит места для 500 любимцев. Но кролики отличаются плодовитостью, и каждая пара взрослых особей, достигших 3-х месяцев, через каждые три месяца производит на свет в среднем по два кролика. Напишите программу, с помощью которой ее бедный муж смог бы ей доказать, что через несколько месяцев, в доме не останется места даже для хозяев. Определите сколько времени потребуется для перенаселения дома, и выведите таблицу, где бы отдельно указывалось количество взрослых особей, количество "несовершеннолетних" кроликов и общее поголовье.

Решение

Для большей наглядности будем считать кроликов не поштучно, а парами.
При первых же десяти последовательностях подсчета, сразу видим, что получается ряд чисел Фибоначчи. А с этими числами мы уже имели дело в задаче 3.16. Воспользуемся алгоритмом подсчета чисел Фибоначчи, который мы ранее использовали. Получается, что всю квартиру кролики заселят чуть менее, чем за три года.

Интересно, что и число несовершеннолетних особей увеличивается по правилу ряда фибоначчи.
И число взрослых особей увеличивается по правилу ряда фибоначчи.
И общее число особей увеличивается по правилу фибоначчи.

Код программы:


import java.io.*;
import javagently.*;

class Rabbits {

Rabbits() throws IOException {
long total = 1; // vsego
long adult = 1; // vzrosly
long minor = 0; // dety
int mon = 0;
int k = 3;
long a = 1;
long b = 1;
long c = 0;
System.out.print("Month: " + (mon ) + "\t");
System.out.print("minor " + c + "\t\t");
System.out.print("adult " + (a) + "\t\t");
System.out.print("total " + (b) + "\t");
System.out.println();

for(int i=0; i<4;i++){

c = a+b;
System.out.print("Month: " + (mon = mon + k) + "\t");
if(a < 10)
System.out.print("minor " + a + "\t\t");
else
System.out.print("minor " + a + "\t");
if(b < 10)
System.out.print("adult " + b + "\t\t");
else
System.out.print("adult " + b + "\t");
System.out.print("total " + c + "\t");
System.out.println();

a=b+c;
System.out.print("Month: " + (mon = mon + k) + "\t");
if(b < 10)
System.out.print("minor " + b + "\t\t");
else
System.out.print("minor " + b + "\t");
if(c < 10)
System.out.print("adult " + c + "\t\t");
else
System.out.print("adult " + c + "\t");
System.out.print("total " + a + "\t");
System.out.println();

b=c+a;
System.out.print("Month: " + (mon = mon + k) + "\t");
if(c < 10)
System.out.print("minor " + c + "\t\t");
else
System.out.print("minor " + c + "\t");
if(a < 10)
System.out.print("adult " + a + "\t\t");
else
System.out.print("adult " + a + "\t");
System.out.print("total " + b + "\t");
System.out.println();

}


}


public static void main (String[] args) throws IOException {

new Rabbits();
}
}


Результат :

Подсказка


Назад | Начало урока | Вверх | Вперед
Содержание

Hosted by uCoz