Посчитайте, какое минимальное количество столов потребуется, чтобы рассадить всю компанию - Turbo Pascal
Формулировка задачи:
а свой день рождения Вася решил пригласить всех своих друзей. Приняли приглашение и подтвердили участие в вечеринке по случаю дня рождения N человек. Вася даже придумал программу вечера для своих друзей: сначала будет чаепитие с тортом, затем игры и конкурсы. Чтобы рассадить всех своих друзей за столы для чаепития и потратить при этом меньше усилий по сервировке праздничных столов, Вася решил посчитать минимальное их количество. Оказалось, что в распоряжении Васи имеется K4 четырехместных стола и K2 — двухместных. Посчитайте, какое минимальное количество столов потребуется, чтобы рассадить всю компанию.
Формат ввода
В первой и единственной строке вводят числа N, K4, K2 — количество друзей Васи, подтвердивших участие в вечеринке, количество четырехместных столов и количество двухместных столов, которые есть в распоряжении Васи соответственно (1 ≤ N ≤ 1018, 0 ≤ K2, K4 ≤ 1018).
Формат вывода
Выведите одно число — минимальное количество столов, за которые можно рассадить всех друзей. Если же разместить всех друзей не получится, выведите -1.
Пример
Ввод
10 5 3
Вывод
3
Решение задачи: «Посчитайте, какое минимальное количество столов потребуется, чтобы рассадить всю компанию»
textual
Листинг программы
program pr; var n, k1, k2: integer; r, s, f, g: integer; begin g := 0; readln(n, k1, k2); if (n >= 1) and (n <= 1018) and (k2 >= 0) and (k1 <= 1018) then begin if n > 5 then begin r := trunc(n / 4); // полное количество 4 местных стульев s := n - r * 4; f := trunc(s / 2); // полное 2 местных стульев if (r <= k1) and (f <= k2) and ((f + r) <= k1 + k2) then begin writeln(f + r); // комбинация из стульев end else writeln(-1); end else begin if (n = 1) and ((k1 > 0) or (k2 > 0)) then begin g := 1; writeln(1); exit; end; 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; if (n = 2) and ((k1 = 0) and (k2 = 1)) then begin g := 1; writeln(1); exit; end; if ((n = 1) or (n = 2) or (n = 3) or (n = 4)) and (k1 > 0) then begin g := 1; writeln(1); exit; end; if (n = 5) and (k1 > 1) then begin writeln(2); g := 1; exit end; if (n = 5) and (k1 <= 1) and (k2 > 2) then begin g := 1; writeln(3); exit end; if g < 1 then writeln(-1); end; end else writeln('(1 <= N <= 1018, 0 <= K2, K1 <= 1018'); // в этой строчке ещё можно так end else exit; end.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д