Посчитайте, какое минимальное количество столов потребуется, чтобы рассадить всю компанию - Turbo Pascal

Узнай цену своей работы

Формулировка задачи:

а свой день рождения Вася решил пригласить всех своих друзей. Приняли приглашение и подтвердили участие в вечеринке по случаю дня рождения N человек. Вася даже придумал программу вечера для своих друзей: сначала будет чаепитие с тортом, затем игры и конкурсы. Чтобы рассадить всех своих друзей за столы для чаепития и потратить при этом меньше усилий по сервировке праздничных столов, Вася решил посчитать минимальное их количество. Оказалось, что в распоряжении Васи имеется K4 четырехместных стола и K2 — двухместных. Посчитайте, какое минимальное количество столов потребуется, чтобы рассадить всю компанию. Формат ввода В первой и единственной строке вводят числа N, K4, K2 — количество друзей Васи, подтвердивших участие в вечеринке, количество четырехместных столов и количество двухместных столов, которые есть в распоряжении Васи соответственно (1 ≤ N ≤ 1018, 0 ≤ K2, K4 ≤ 1018). Формат вывода Выведите одно число — минимальное количество столов, за которые можно рассадить всех друзей. Если же разместить всех друзей не получится, выведите -1. Пример Ввод 10 5 3 Вывод 3

Решение задачи: «Посчитайте, какое минимальное количество столов потребуется, чтобы рассадить всю компанию»

textual
Листинг программы
  1. program pr;
  2.  
  3. var
  4.   n, k1, k2: integer;
  5.   r, s, f, g: integer;
  6.  
  7. begin
  8.   g := 0;
  9.   readln(n, k1, k2);
  10.   if (n >= 1) and (n <= 1018) and (k2 >= 0) and (k1 <= 1018) then
  11.   begin
  12.     if n > 5 then
  13.     begin
  14.       r := trunc(n / 4);   // полное количество 4 местных стульев
  15.       s := n - r * 4;
  16.       f := trunc(s / 2); // полное 2 местных стульев
  17.       if (r <= k1) and (f <= k2) and ((f + r) <= k1 + k2) then
  18.       begin
  19.         writeln(f + r);   // комбинация из стульев
  20.       end else writeln(-1);
  21.     end
  22.     else  begin
  23.       if (n = 1) and ((k1 > 0) or (k2 > 0)) then begin g := 1; writeln(1); exit; end;
  24.       if ((n = 1) or (n = 2) or (n = 3) or (n = 4))  and ((k1 = 0) and (k2 > 1)) then begin g := 1; writeln(2); exit; end;
  25.       if (n = 2)  and ((k1 = 0) and (k2 = 1)) then begin g := 1; writeln(1); exit; end;
  26.       if ((n = 1) or (n = 2) or (n = 3) or (n = 4))  and (k1 > 0) then begin g := 1; writeln(1); exit; end;
  27.       if (n = 5) and (k1 > 1) then begin writeln(2); g := 1; exit end;
  28.       if (n = 5) and (k1 <= 1) and (k2 > 2) then begin g := 1; writeln(3); exit end;
  29.       if g < 1 then
  30.         writeln(-1);
  31.     end;
  32.   end else writeln('(1 <= N <= 1018, 0 <= K2, K1 <= 1018'); // в этой строчке ещё можно так   end else exit;
  33. end.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 4.4 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы