Форум программистов, компьютерный форум, киберфорум
Наши страницы

Turbo Pascal

Войти
Регистрация
Восстановить пароль
 
Varitan
1 / 1 / 0
Регистрация: 25.01.2016
Сообщений: 107
#1

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

07.06.2016, 17:41. Просмотров 254. Ответов 7
Метки нет (Все метки)

а свой день рождения Вася решил пригласить всех своих друзей. Приняли приглашение и подтвердили участие в вечеринке по случаю дня рождения N человек. Вася даже придумал программу вечера для своих друзей: сначала будет чаепитие с тортом, затем игры и конкурсы. Чтобы рассадить всех своих друзей за столы для чаепития и потратить при этом меньше усилий по сервировке праздничных столов, Вася решил посчитать минимальное их количество. Оказалось, что в распоряжении Васи имеется K4 четырехместных стола и K2 — двухместных. Посчитайте, какое минимальное количество столов потребуется, чтобы рассадить всю компанию.
Формат ввода

В первой и единственной строке вводят числа N, K4, K2 — количество друзей Васи, подтвердивших участие в вечеринке, количество четырехместных столов и количество двухместных столов, которые есть в распоряжении Васи соответственно (1 ≤ N ≤ 1018, 0 ≤ K2, K4 ≤ 1018).
Формат вывода

Выведите одно число — минимальное количество столов, за которые можно рассадить всех друзей. Если же разместить всех друзей не получится, выведите -1.
Пример

Ввод
10 5 3
Вывод
3
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.06.2016, 17:41
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Посчитайте, какое минимальное количество столов потребуется, чтобы рассадить всю компанию (Turbo Pascal):

Определить, какое минимальное число поездок на лифте потребуется для подъема всей техники - Pascal
Даны веса 3-х бытовых приборов в кг (a, b, c). Определить, какое минимальное число поездок на лифте грузоподъемностью n кг потребуется для...

Какое минимальное расстояние должен проплыть Яша, чтобы чтобы выбраться из бассейна на бортик? - Turbo Pascal
Помогите с задачами B, C, D, E, F

Сколько времени потребуется, чтобы количество бактерий превзошло X? - Turbo Pascal
Каждая бактерия делится на две в течении одной минуты. В начальный момент имеется A бактерий. Сколько времени потребуется, чтобы количество...

Сколько времени потребуется, чтобы количество бактерий превзошло заданное число? - Turbo Pascal
Каждая бактерия делится на две в течение одной минуты. В начальный момент имеется A бактерий. Сколько времени потребуется, чтобы количество...

Какое минимальное расстояние должен проплыть Яша, чтобы выбраться из бассейна на бортик? - Turbo Pascal
ша плавал в бассейне размером NM метров и устал. В этот момент он обнаружил, что находится на расстоянии x метров от одного из длинных...

Какое минимальное расстояние должен проплыть Халк чтобы выбраться из бассейна на бортик? - Pascal
Халк плавал в бассейне размером N и M метров и устал. в этот момент он обнаружил, что находится на расстоянии X метров от одного из длинных...

7
Peoples
1172 / 677 / 426
Регистрация: 06.02.2016
Сообщений: 1,782
Записей в блоге: 13
Завершенные тесты: 4
07.06.2016, 21:36 #2
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
program pr;
var
  n, k1, k2: integer;
  r,s, f: integer;
begin
  readln(n, k1, k2);
  r := trunc(n / 4);   // полное количество 4 местных стульев
  if r <= k1 then
  begin
    s := n - r * 4;
    f := trunc(s / 2); // полное 2 местных стульев
    if f<=k2 then
    begin
      writeln(f + r);   // комбинация из стульев
      end else writeln(-1);
  end else writeln(-1);
end.
Добавлено через 11 минут
Можно вот так ещё описать, исключив значения не подходящие для расчёта
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
program pr;
var
  n, k1, k2: integer;
  r,s, f: integer;
begin
  readln(n, k1, k2);
  if (n=1) or (n=2) or (n=3) or (n=4)  then begin writeln(1); exit; end;
  if n=5 then begin writeln(2); exit end ;
  r := trunc(n / 4);   // полное количество 4 местных стульев
  if r <= k1 then
  begin
    s := n - r * 4;
    f := trunc(s / 2); // полное 2 местных стульев
    if f<=k2 then
    begin
      writeln(f + r);   // комбинация из стульев
      end else writeln(-1);
  end else writeln(-1);
end.
Добавлено через 15 минут
Или так
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
program pr;
var
  n, k1, k2: integer;
  r,s, f,g: integer;
begin
g:=0;
  readln(n, k1, k2);
if n>5 then
begin
  r := trunc(n / 4);   // полное количество 4 местных стульев
  if r <= k1 then
  begin
    s := n - r * 4;
    f := trunc(s / 2); // полное 2 местных стульев
    if f<=k2 then
    begin
      writeln(f + r);   // комбинация из стульев
      end else writeln(-1);
  end else writeln(-1);
  end 
  else  begin 
  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.
Добавлено через 18 минут
Извиняюсь, вот окончательный вариант
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
program pr;
var
  n, k1, k2: integer;
  r,s, f,g: integer;
begin
g:=0;
  readln(n, k1, k2);
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.
1
Varitan
1 / 1 / 0
Регистрация: 25.01.2016
Сообщений: 107
08.06.2016, 17:26  [ТС] #3
Peoples, спасибо,хотя не все тесты прошло.
0
Peoples
1172 / 677 / 426
Регистрация: 06.02.2016
Сообщений: 1,782
Записей в блоге: 13
Завершенные тесты: 4
08.06.2016, 17:28 #4
Varitan, а какие именно не прошла последняя версия кода?
0
Varitan
1 / 1 / 0
Регистрация: 25.01.2016
Сообщений: 107
08.06.2016, 17:57  [ТС] #5
Peoples, к сожалению там не видны условия теста.

Добавлено через 59 секунд
Peoples, там не видны условия теста,но не прошел последний тест.
0
Peoples
1172 / 677 / 426
Регистрация: 06.02.2016
Сообщений: 1,782
Записей в блоге: 13
Завершенные тесты: 4
08.06.2016, 22:55 #6
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Если последний тест не проходится из-за того, что я забыл про эти условия (1 ≤ N ≤ 1018, 0 ≤ K2, K1 ≤ 1018), то дополнил
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
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.
Добавлено через 19 минут
Если снова не получится, то замените 32 строчку на
Pascal
1
end else exit;
Если и так тест не пройдёт, то не знаю
0
кот Бегемот
Платежеспособный зверь
8207 / 3778 / 691
Регистрация: 28.10.2009
Сообщений: 9,635
11.06.2016, 15:11 #7
Peoples,
это не 1018, а 1018 и integer тут не прокатит
1
Peoples
1172 / 677 / 426
Регистрация: 06.02.2016
Сообщений: 1,782
Записей в блоге: 13
Завершенные тесты: 4
11.06.2016, 15:16 #8
кот Бегемот, Возможно, когда-нибудь, люди научатся писать ^ в постановке условий
0
11.06.2016, 15:16
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.06.2016, 15:16
Привет! Вот еще темы с ответами:

Какое минимальное число букв необходимо заменить в слове Х, с тем, чтобы оно стало перевертышем? - Pascal
Доброго времени суток! Крайне необходима помощь экспертов в Pascal Вот задания: 4. Какое минимальное число букв необходимо заменить в...

На какое минимальное и максимальное количество слогов можно разбить слово - Pascal
Задача олимпиады! помогите? плиз??? будем называть словам последовательность строчных букв английского алфавита, оканчивающуйся на...

Какое минимальное количество взвешиваний необходимо для определения 8-ой монеты - Pascal
Задача выглядит вот так: На столе стоят две стопки монет. В одной стопке 8 золотых монет, а в другой 8 серебряных. Обе стопки упорядочены...

Дано слово. На какое минимальное количество слогов его можно разбить? - Pascal
Будем называть словом последовательность строчных букв английского алфавита,оканчивающуюся на гласную букву,а слогом - либо...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru