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

Решите пожалуйста первую задачу
Желательно на C и C++

Приложения:

csharp: О, а как ты попал на эту олимпиаду?
lifeminelivegood: +++
lifeminelivegood: Да,как ты попал на олимпиаду,если не знаешь даже ответы на задание?
MupoTBopec: Вы никогда не участвовали в олимпиадах чтоль? Ребят, в школьном этапе по инфе, нет программирования вообще. По крайней мере, когда я учился - было так. Зато когда на муниципалку приходишь - там только программирование

Ответы

Автор ответа: MupoTBopec
0

#include "iostream"

using namespace std;

int main(){

int a, b, c;

int x = 0, y = 0, z = 0;

cin >> a >> b >> c;

int amount = a + b + c;

while(amount > 0){

 if(b != 0 && c != 0 && a < b + c){

  x += 1;

  b -= 1; c -= 1;

 }

 if(a != 0 && c != 0 && b < a + c){

  y += 1;

  a -= 1; c -= 1;

 }

 if(a != 0 && b != 0 && c < a + b){

  z += 1;

  a -= 1; b -= 1;

 }

 amount -= 2;

}

cout << x << " " << y << " " << z << endl;

return 0;

}

Приложения:

csharp: Можешь коротко объяснить принцип? Для себя. А то прочитав задание не понял, как это должно работать.
MupoTBopec: Необходимо добавить условие, которое будет говорить, что сумма двух собираемых вещей(если мы собираем, например карандаши и блокноты), должна быть больше чем кол-во оставшейся вещи(получается, шоколада). В противном случае, получится, что будет максимально отрабатывать один оператор ветвления, а остальные будут работать уже по тому кол-ву, что осталось.
MupoTBopec: Попробую на примере. Мы вводим 4 4 4(4к, 4б, 4ш). Если не включать доп. условие, о котором я пишу выше, то получится, что будет работать только 1 оператор ветвления. Вот результат:
4 4 4 - изначально
3 3 4 - 1 подарок
2 2 4 - 2 подарок
1 1 4 - 3 подарок
0 0 4 - 4 подарок
и на этом всё. 4 шоколадки так и останутся. А теперь мы добавим условие, чтобы сумма собираемых была больше кол-ву оставшейся.
MupoTBopec: 4 4 4 - изначально
3 3 4 - 1 подарок
2 2 4 - 2 подарок. Здесь проверяестся 2+2 = 4, но оно не больше чем 4 шоколадки. значит собираем другой подарок
2 1 3 - 3 подарок. Теперь также 2+1 = 3, оно не больше чем 3 шоколадки. значит собираем снова другой
1 1 2 - 4 подарок. аналогичная ситуация
1 0 1 - 5 подарок
0 0 0 - 6 подарок
И в итоге, мы получаем 6 подарков. То самое макс. кол-во, о котором говорилось.
MupoTBopec: Я надеюсь, более менее понятно стало. Если ты, конечно, именно об этом просил)
csharp: А для чего нам это условие в принципе? И откуда оно вытекает?
Похожие вопросы