Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.77/26: Рейтинг темы: голосов - 26, средняя оценка - 4.77
0 / 0 / 0
Регистрация: 28.09.2019
Сообщений: 24

Наборы пирожных

29.10.2020, 17:33. Показов 5711. Ответов 16
Метки нет (Все метки)

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

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

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

Выходные данные

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

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

Ввод 4
5

Вывод 1
2

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

Ввод 5
3

Вывод −1

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



Пытался делать сам, получилось так, что уж лучше бы не делал
C++
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
#include <bits/stdc++.h>
 
using namespace std;
 
int main() {
  int a, b, c, d, e = 1;
  cin >> a >> b;
  if ((a + b) % 3 == 0) {
    if (a > 0 && b > 0) {
      if (e % 2 == 1) {
        a -= 2;
        b -= 1;
        c += 1;
      }
      if (e % 2 == 0) {
        a -= 1;
        b -= 2;
        d += 1;
      }
      return 1;
    } else
      cout << c << d;
  } else
    cout << -1;
}
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
29.10.2020, 17:33
Ответы с готовыми решениями:

Функционально полные наборы и базисные наборы (Дискретная Математика)
Напишите, пожалуйста, программу по любой из задач, показанных на скриншоте. С принципом работы постараюсь разобраться сам, но желательно...

Массивы: найти общее число съеденных пирожных и прогнозируемое число съеденных пирожных за 10 лет
Условие: Начать свои тренировки в статистике Алексей решил с членов собственной семьи. В семье Алексея N человек, в этом месяце каждый...

Различные версии с++ в виде VS и наборы исходников
Я как абсолютный нелюбитель с++ итд столкнулся со следующей забавной штукой - есть исходники ID Software - quake, quake2 и их форков на тех...

16
12 / 9 / 3
Регистрация: 28.10.2020
Сообщений: 24
29.10.2020, 17:43
Что такое e у вас и зачем она вообще нужна? Насколько я понимаю на каждой итерации вам нужно вычитать 2 из большего числа и 1 из меньшего, а если они равны, то без разницы. А e не нужна.
1
0 / 0 / 0
Регистрация: 28.09.2019
Сообщений: 24
29.10.2020, 17:48  [ТС]
Сейчас сделаю, отправлю результат

Добавлено через 3 минуты
C++
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
#include <bits/stdc++.h>
 
using namespace std;
 
int main() {
  int a, b, c, d;
  cin >> a >> b;
  if ((a + b) % 3 == 0) {
    if (a > 0 && b > 0) {
      if (a>b) {
        a -= 2;
        b -= 1;
        c += 1;
      }
      if (a<b||a==b) {
        a -= 1;
        b -= 2;
        d += 1;
      }
      return 1;
    } else
      cout << c << d;
  } else
    cout << -1;
}

Не работает вывод, отправляет пустоту
0
12 / 9 / 3
Регистрация: 28.10.2020
Сообщений: 24
29.10.2020, 17:56
Вам еще цикл надо организовать

C++
1
2
3
4
while(a > 0 && b > 0)
{
   // сделать вычисления здесь
}
И после цикла проверить если обе переменные a и b равны 0 значит пирожные удалось разложить по коробкам без остатка, иначе разложить пирожные нельзя.

Добавлено через 2 минуты
Цитата Сообщение от mismas Посмотреть сообщение
return 1;
завершает программу раньше времени, уберити его.

И как я написал выше вместо if (a > 0 && b > 0) должен быть цикл while(a > 0 && b > 0)

if внутри цикла можно упростить, используя else:

C++
1
2
3
4
5
6
7
8
9
10
      if (a>b) {
        a -= 2;
        b -= 1;
        c += 1;
      }
      else {
        a -= 1;
        b -= 2;
        d += 1;
      }
Добавлено через 1 минуту
C++
1
cout << c << d;
выведет числа подряд без разделителя вам надо добавить разделитель между ними - пробел или перевод строки

C++
1
cout << c << ' ' << d << endl;
или

C++
1
cout << c << endl << d << endl;
1
0 / 0 / 0
Регистрация: 28.09.2019
Сообщений: 24
29.10.2020, 17:57  [ТС]
C++
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
#include <bits/stdc++.h>
 
using namespace std;
 
int main() {
  int a, b, c, d;
  cin >> a >> b;
  if ((a + b) % 3 == 0) {
    while (a > 0 && b > 0) {
      if (a>b) {
        a -= 2;
        b -= 1;
        c += 1;
        cout<<a<<b;
      }
      if (a<b||a==b) {
        a -= 1;
        b -= 2;
        d += 1;
        cout<<a<<b;
      }
    }
    if (a==0 && b == 0){
        cout<<c<<d;
    }
    else
        cout<<-1;
  }
  else
    cout << -1;
}
после каждого if поставил на вывод a и b, оказалось, что в какой-то момент равны -2;-1.
0
12 / 9 / 3
Регистрация: 28.10.2020
Сообщений: 24
29.10.2020, 17:59
Логично

Надо, чтобы хотя бы одно число было больше или равно 2

while (a >= 2 || b >= 2)
1
0 / 0 / 0
Регистрация: 28.09.2019
Сообщений: 24
29.10.2020, 18:03  [ТС]
C++
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
#include <bits/stdc++.h>
 
using namespace std;
 
int main() {
  int a, b, c, d;
  cin >> a >> b;
  if ((a + b) % 3 == 0) {
    while (a >= 2 && b >= 2) {
      if (a>b) {
        a -= 2;
        b -= 1;
        c += 1;
        cout<<a<<b;
      }
      else
        a -= 1;
        b -= 2;
        d += 1;
        cout<<a<<b;
    }
    if (a==0 && b == 0){
        cout<<c<<" "<<d;
    }
    else
        cout<<-1;
  }
  else
    cout << -1;
}
пока что получилось вот так, код не выполняет последнее действие, a и b равны 2 и 1, при исходных 4 и 5 соответственно.
0
12 / 9 / 3
Регистрация: 28.10.2020
Сообщений: 24
29.10.2020, 18:06
C++
1
2
}
      if (a<b||a==b) {
И вот здесь ошибка - используйте else, иначе вы можете сделать больше чем 2 операции за 1 цикл

Добавлено через 1 минуту
Цитата Сообщение от mismas Посмотреть сообщение
while (a >= 2 && b >= 2)
не &&, а || Достаточно чтобы одна переменная была больше 2
1
0 / 0 / 0
Регистрация: 28.09.2019
Сообщений: 24
29.10.2020, 18:07  [ТС]
Цитата Сообщение от Trimatron Посмотреть сообщение
не &&, а || Достаточно чтобы одна переменная была больше 2
Все равно -1 в выводе
0
12 / 9 / 3
Регистрация: 28.10.2020
Сообщений: 24
29.10.2020, 18:09
Покажите код? У меня все работает локально
1
0 / 0 / 0
Регистрация: 28.09.2019
Сообщений: 24
29.10.2020, 18:09  [ТС]
C++
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
#include <bits/stdc++.h>
 
using namespace std;
 
int main() {
  int a, b, c, d;
  cin >> a >> b;
  if ((a + b) % 3 == 0) {
    while (a >= 2 || b >= 2) {
      if (a>b) {
        a -= 2;
        b -= 1;
        c += 1;
      }
      else
        a -= 1;
        b -= 2;
        d += 1;
    }
    if (a==0 && b == 0){
        cout<<c<<" "<<d;
    }
    else
        cout<<-1;
  }
  else
    cout << -1;
}
0
12 / 9 / 3
Регистрация: 28.10.2020
Сообщений: 24
29.10.2020, 18:11
Лучший ответ Сообщение было отмечено mismas как решение

Решение

А вижу в чем проблема
Цитата Сообщение от mismas Посмотреть сообщение
else
a -= 1;
b -= 2;
d += 1;
cout<<a<<b;
вы забыли {} после else

Добавлено через 1 минуту
C++
1
2
3
4
5
6
else {
    a -= 1;
    b -= 2;
    d += 1;
    cout<<a<<b;
}
1
0 / 0 / 0
Регистрация: 28.09.2019
Сообщений: 24
29.10.2020, 18:16  [ТС]
C++
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
#include <bits/stdc++.h>
 
using namespace std;
 
int main() {
  int a, b, c, d;
  cin >> a >> b;
  if ((a + b) % 3 == 0) {
    while (a >= 2 || b >= 2) {
      if (a>b) {
        a -= 2;
        b -= 1;
        c += 1;
      }
      else{
        a -= 1;
        b -= 2;
        d += 1;
      }
    }
    if (a==0 && b == 0){
        cout<<c<<" "<<d;
    }
    else
        cout<<-1;
  }
  else
    cout << -1;
}
Извиняюсь за свою тормознутость, не очень хорош в c++. Теперь -1 не выводится, но при вводе 4 5 выводится 4354415 7208834
0
12 / 9 / 3
Регистрация: 28.10.2020
Сообщений: 24
29.10.2020, 18:17
Инициализация переменных:

C++
1
int a, b, c = 0, d = 0;
1
0 / 0 / 0
Регистрация: 28.09.2019
Сообщений: 24
29.10.2020, 18:18  [ТС]
Цитата Сообщение от mismas Посмотреть сообщение
Извиняюсь за свою тормознутость, не очень хорош в c++. Теперь -1 не выводится, но при вводе 4 5 выводится 4354415 7208834
Извините, это уже проблема моего компилятора, в другом ответ вывелся

Добавлено через 44 секунды
Цитата Сообщение от Trimatron Посмотреть сообщение
int a, b, c = 0, d = 0;
А теперь и в кодблоксе правильно. Огромное Вам спасибо
0
12 / 9 / 3
Регистрация: 28.10.2020
Сообщений: 24
29.10.2020, 18:20
Нет, это проблема не компьютера, а то, что переменные не проинициализированы явно. Одни компиляторы помещает в такие переменные нули, а другие помещают мусор.

Не забывайте всегда инициализировать переменные - это хорошая практика, как и всегда использовать {} после If/else/циклов и т.д.
0
 Аватар для Annemesski
2670 / 1333 / 479
Регистрация: 08.11.2016
Сообщений: 3,684
29.10.2020, 19:27
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
 
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;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
29.10.2020, 19:27
Помогаю со студенческими работами здесь

Свой компилятор: а правильно ли я разместил наборы токенов?
Продолжаю тему пустого трепа и размышлений о том &quot;как лучше и приятнее&quot; сделать некоторые фичи компилятора на коленках. На этот раз...

Проверить, состоят ли наборы из одних и тех же слов
6 Даны два набора по 12 слов в каждом. Проверить, состоят ли эти наборы из одних и тех же слов.

Вывести общую сумму всех элементов, входящих в данные наборы
Даны целые числа K, N, а также K наборов целых чисел по N элементов в каждом наборе. Вывести общую сумму всех элементов, входящих в ...

Вывести общую сумму всех элементов, входящих в заданные наборы
Даны целые числа K, N, а также K наборов целых чисел по N элементов в каждом наборе. Вывести общую сумму всех элементов, входящих в ...

Разработать функцию, генерирующую все возможные наборы значений n логических переменных в виде массива целых 0
Разработать функцию, генерирующую все возможные наборы значений n логических переменных в виде массива целых 0 или 1. Например, для n = 3...


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

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru