Условие: Сообщество роботов живет по следующим законам: - один раз в начале года они объединяются в группы по три или пять роботов; - за год группа из 3 роботов собирает 5 новых, а группа из 5 роботов собирает 9 новых; - роботы собираются так, чтобы собрать за год наибольшее количество; - каждый робот живет три года после сборки. Известно начальное количество роботов К и все они только что собраны. Сколько роботов будет через N лет?
Технические условия: Стандартные.
Примеры входных и выходных файлов: Отсутствуют.
Решение: Идея решения. Если роботов много, им выгоднее собираться по 5, потому что 3 пятерки соберут 27 роботов, а 5 троек только 25. Рассмотрим все случаи, когда количество роботов не делится на 5. - Количество роботов при делении на 5 дает остаток 3. Роботы собираются пятерками, а три "лишних” робота составляют одну тройку. - Количество роботов при делении на 5 дает остаток 1. Все роботы, кроме 6, собираются пятерками, а 6 "лишних” образуют 2 тройки ( 2 тройки соберут 10 роботов, а одна пятерка- 9). - Количество роботов при делении на 5 дает остаток 4. Все роботы, кроме 9, собираются пятерками, а 9 "лишних” образуюют 3 тройки (3 тройки соберут 15 роботов, а одна пятерка- 9). - Количество роботов при делении на 5 дает остаток 2. Все роботы, кроме 12, собираются пятерками, а 12 лишних образуют 4 тройки (4 тройки соберут 20 роботов, а 2 пятерки -18). Роботы собираются в группы так, чтобы максимальное их число было задействовано в процессе изготовления новых роботов.
var i,k,n,s,s0,s1,s2,s3,x:integer; begin write('Начальное количество роботов...'); readln(k); write('Количество лет...'); readln(n); s0:=k; {количество роботов, которым 0 лет} s1:=0; {количество роботов, которым 1 год} s2:=0; {количество роботов, которым 2 года} s3:=0; {количество роботов, которым 3 года} for i:=0 to n do {процесс идет n лет} begin s:=s0+s1+s2+s3; {сколько всего роботов} case s mod 5 of {выделяем случаи} 0: x:=(s div 5)*9; 1: if s=1 then x:=0 else x:=(((s-5) div 5)*9)+10; 2: if s=2 then x:=0 else if s=7 then x:=10 else x:=(((s-10) div 5)*9)+20; 3 : x:=((s div 5)*9)+5; 4 : if s=4 then x:=5 else x:=(((s-5) div 5)*9)+15; end; s3:=s2; {роботы "постарели” на год} s2:=s1; s1:=s0; s0:=x; {построили за последний год} end; writeln('Через ',n, ' лет будет ',s,' роботов'); end.