Предмет: Информатика, автор: ZonalPlay

Задача 2: Наборы пирожных
На складе кондитерской фабрики хранятся пирожные двух видов — круассаны и эклеры. Круассанов A штук, а эклеров — B штук. Есть неограниченный запас подарочных коробок, в каждую коробку можно положить только три пирожных. При этом требуется, чтобы в коробке были пирожные обоих видов, то есть в одну коробку можно положить два круассана и один эклер или один круассан и два эклера.

Определите, можно ли упаковать все имеющиеся пирожные в коробки и выведите подходящий способ размещения пирожных по коробкам.

Входные данные
Программа получает на вход два целых числа A и B, записанных в отдельных строках. 1 ≤ A ≤ 109, 1 ≤ B ≤ 109.

Выходные данные
Если можно разложить все пирожные по коробкам в соответствии с условием задачи, программа должна вывести два целых числа. Первое число равно количеству коробок, в которых лежит два круассана и один эклер. Второе число равно количеству коробок, в которых лежит один круассан и два эклера.

Если разложить все пирожные по коробкам нужным способом нельзя, программа должна вывести одно число −1.

Система оценивания
Решение, правильно работающее только для случаев, когда числа A и B не превосходят 100, будет оцениваться в 60 баллов.

Примеры
Ввод

Вывод

Пояснение

4
5

1 2

Нужно взять одну коробку с двумя круассанами и одним эклером и две коробки с одним круассаном и двумя эклерами. Всего получится 4 круассана и 5 эклеров.
--------------------------------------------------------------------------------------------------------------------------
5
3

−1

Разложить пирожные по коробкам нельзя.


nikita88728: Я тоже не знаю как сделать эту задачу
minskiy04: #include

int main()
{
int a, b;
std::cin >> a >> b;

int x = ((a + b) / 3) / 2 - abs(a - b) / 2;
int y = (a + b) / 3 - x;

if ((a + b) % 3 || x < 0 || y < 0)
std::cout << -1 << std::endl;
else
std::cout << x << std::endl << y << std::endl;

return 0;
}

___
76 баллов
minskiy04: C++

Ответы

Автор ответа: BogdanPotapkin2002
48

Ответ:

var

  A, B, K, R : longint;

begin

readln(A, B);

if (A mod 2 = 1) and (B mod 2 = 1) then

  writeln('-1');

if (A mod 2 = 0) and (B mod 2 = 0) and

     ((A div 2 <> B) or (B div 2 <> A)) then

  writeln('-1');

if (A mod 2 = 0) and (B mod 2 = 0) and

     ((A div 2 = B) or (B div 2 = A)) then

  if A > B then

     writeln(B, '0')

  else

     writeln('0', A);

if (A mod 2 = 1) and (B mod 2 = A) then begin

  A := A-1;

  B := B-2;

  if (A div 2 = B) or (B div 2 = A) then

     if A > B then

        writeln(B, '0')

     else

        writeln('0', A);

end;

if (B mod 2 = 1) and (A mod 2 = B) then begin

  B := B-1;

  A := A-2;

  if (B div 2 = A) or (A div 2 = B) then

     if B > A then

        writeln(B, '0')

     else

        writeln('0', A)

end;

end.

На 12 баллов. Всё что могу.


0varezhka0: ответь пж что за язык
0varezhka0: неправильно(((
ZonalPlay: это паскаль
ZonalPlay: только в паскале var
0varezhka0: а все правильно спасибо
andrei1mmk: a=int(input())
b=int(input())
x=0
y=0
if (a+b)%3!=0:
print(-1)
else:
if a>=b:
while a>=b:
if a>=2 and b>=1:
x+=1
a-=2
b-=1

while b!=0 or a!=0:
if b>=a:
if b>=2 and a>=1:
y+=1
b-=2
a-=1
elif a>=b:
if a>=2 and b>=1:
x+=1
a-=2
b-=1
if a==0 and b==0:
print(x,y)
else:
print(-1)
elif b>=a:
while b>=a:
if b>=2 and a>=1:
y+=1
b-=2
a-=1
while a!=0 or b!=0:
if a>=b:
if a>=2 and b>=1:
x+=1
a-=2
b-=1
elif b>=a:
if b>=2 and a>=1:
y+=1
b-=2
a-=1
if a==0 and b==0:
print(x,y)
else:
print(-1)
andrei1mmk: это на питоне 24 бала
alisaualisa: это все писать в ответ?
316575: Это для 7 класса????
ZonalPlay: 10
Автор ответа: UmV0dHIw
21

Ответ:

a = int(input())

b = int(input())

if (a + b) % 3 != 0:

   print(-1)

else:

   if (a // b == 2) or (b // a == 2):

       

       if a % 2 < b % 2:

           print((a + b) // 3, 0)

           

       elif a % 2 > b % 2:

           print(0, (a + b) // 3)

       else:

           print(-1)

   else:

       if (b - a ==  b % a) or (a - b == a % b):

           print(a // 3, (b - (a // 3)) // 2)

       else:

           print(-1)

Объяснение:

набрал 36 баллов

Приложения:

goraltu2007: а это какой язык?
aerostepan: python
Андрей20005: Мог просто написать два цикла и подставлять значения кол-ва коробок, но получил бы 60 баллов, т.к. с большими значениями превысилось бы ограничение по временя.
Похожие вопросы
Предмет: Английский язык, автор: radomirilin111
Предмет: История, автор: женя123453