Роботландия (2 уровень)

Условие:
Сообщество роботов живет по следующим законам:
- один раз в начале года они объединяются в группы по три или пять роботов;
- за год группа из 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;
{case}
s3:=s2; {роботы “постарели” на год}
s2
:=s1;
s1:=s0;
s0:=x; {построили за последний год}
end;
writeln('Через ',n, ' лет будет ',s,' роботов');
end.