Глава 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();
}
}
Результат :
Назад |
Начало урока |
Вверх |
Вперед
Содержание