Олимпиадная задача
|
|
Deswing | Дата: Среда, 05 Декабря 2012, 17:58 | Сообщение # 1 |
заслуженный участник
Сейчас нет на сайте
| Задача "Кока-кола"
Одна баночка кока-колы стоит B рублей. Пустую баночку из-под кока-колы можно сдать и получить за неё E рублей. У Васи есть R рублей. Он покупает кока-колу, выпивает её, сдаёт баночку, снова покупает кока-колу и так далее до тех пор, пока имеющихся у него денег (после сдачи очередной баночки) хватает на покупку кока-колы. Сколько всего банок кока-колы он выпьет?
Формат ввода Вводится три натуральных числа B,E,R (1<=E<B<=30000, 1<=R<=30000)
Формат вывода Выведите одно число - количество баночек, которое сможет выпить Вася.
Помогите пожалуйста. Сам целый день долблю - не могу разобраться Причём даже школьный учитель (хотя она, видимо, лишь поверхностно знает ЯПы) не может решить. Я всё делал, пытался. Заводил счетчик, делал "буфер" - но всё равно у меня было что-то не так с формулами, т.к. выводились числа, которые не соответствуют решению задачи. Если покажите как нужно было делать - буду очень благодарен (ОЧЕНЬ. Ну помогите же новичку! ).
Сообщение отредактировал Deswing - Среда, 05 Декабря 2012, 18:00 |
|
| |
OlegDSX | Дата: Среда, 05 Декабря 2012, 18:30 | Сообщение # 2 |
участник
Сейчас нет на сайте
| Я C++ не шарю, так что пишу просто
b=10 e=5 r=100
цикл пока r > b делать он покупает r=r-b он сдает r=r+e сетчик: k=k+1
уловие цикла невыполнино вывести к
|
|
| |
Apati | Дата: Среда, 05 Декабря 2012, 18:37 | Сообщение # 3 |
заслуженный участник
Сейчас нет на сайте
| r >= b
|
|
| |
Deswing | Дата: Среда, 05 Декабря 2012, 21:37 | Сообщение # 4 |
заслуженный участник
Сейчас нет на сайте
| Code #include <iostream> using namespace std;
void main() { setlocale(0,"Russian"); start: int B = 0, E = 0, R = 0; int banki=0; cout<<"Пожалуйста, введите стиомость кока-колы, стоимость пустой банки, деньги, которые \nесть у Васи (Пример: 2 1 3)"<<'\n'; cin>>B>>E>>R; if(E<1) { cout<<"Извините, но стоимость пустой банки не может быть меньше единицы. Program restart"<<'\n'; goto start; } if(E>B) { cout<<"Извините, но стоимость пустой банки не может быть больше стоимости кока-колы. Program restart"<<'\n'; goto start; } if(B>30000) { cout<<"Извините, но стоимость кока-колы не может быть больше 30000. Program restart"<<'\n'; goto start; } if(R<1) { cout<<"У Васи должно быть больше денег. 1 рубля мало <img src="http://s12.ucoz.net/sm/1/smile.gif" border="0" align="absmiddle" alt="smile" /> Program restart"; goto start; } if(R>30000) { cout<<"У Васи должно быть меньше денег денег. 30000 рублей - сколько же колы пить будет? <img src="http://s12.ucoz.net/sm/1/smile.gif" border="0" align="absmiddle" alt="smile" /> Program restart"; goto start; } while(R>B) { R=R-B; R=R+E; banki++; } cout<<"У Васи "<<banki<<" банки(ок) из-под кока-колы ^^"<<'\n'; goto start; } или можно было сделать "компактнее" и лучше? Научите, покажите. Пожалуйста =)Добавлено (05.12.2012, 21:37) ---------------------------------------------
не, если ставить ещё и "=", то получится, что в каком-то определенном случае он уберет единицу. А так он спокойно все поделит и цикл завершится
|
|
| |
EchoIT | Дата: Среда, 05 Декабря 2012, 21:48 | Сообщение # 5 |
старожил
Сейчас нет на сайте
| После этого я сразу понял, откуда задача. Я бы тебе помог, но в C++ не шарю, только Delphi.
Долгожданный анонсик: State of War
|
|
| |
Apati | Дата: Среда, 05 Декабря 2012, 21:56 | Сообщение # 6 |
заслуженный участник
Сейчас нет на сайте
| Quote (Deswing) не, если ставить ещё и "=", то получится, что в каком-то определенном случае он уберет единицу. А так он спокойно все поделит и цикл завершится Что? У тебя есть 30 рублей и банка колы стоит 30 рублей, сможешь ли ты ее купить?
|
|
| |
Deswing | Дата: Среда, 05 Декабря 2012, 22:02 | Сообщение # 7 |
заслуженный участник
Сейчас нет на сайте
| Quote (Apati) Что? У тебя есть 30 рублей и банка колы стоит 30 рублей, сможешь ли ты ее купить? смогу О_о
|
|
| |
Apati | Дата: Среда, 05 Декабря 2012, 22:03 | Сообщение # 8 |
заслуженный участник
Сейчас нет на сайте
| Тогда условие >= подойдет лучше
|
|
| |
Deswing | Дата: Среда, 05 Декабря 2012, 22:24 | Сообщение # 9 |
заслуженный участник
Сейчас нет на сайте
| Apati, тьфу, пардон))) Засиделся, извините)) Вы правы))) Добавлено (05.12.2012, 22:24) --------------------------------------------- а как задачу надо было решать? Все говорят, что моё решение - ужас. Оптимизируйте, пожалуйста. Для меня это очень важно
|
|
| |
Deeem_ER | Дата: Четверг, 06 Декабря 2012, 00:05 | Сообщение # 10 |
был не раз
Сейчас нет на сайте
| Deswing, Я бы данную программу реализовал вот так: Code #include <iostream> #include <conio.h>
using namespace std;
class CocaCola { private: int Cash, Price, OddMoney; int NewCash; int Count; public: void Enter() { cout << "Введите цену на банку Кока-Колы." << endl << "Не больше 3000." << endl; do { cin >> Price; } while (Price > 3000);
cout << endl << "Введите наличные." << endl << "Не меньше 1, не больше 30000." << endl; do { cin >> Cash; } while (Cash < 1 || Cash > 30000);
cout << endl << "Введите цену за сдачу банки из под Кока-Колы." << endl << "Не больше цены полной банки и не больше 30000." << endl; do { cin >> OddMoney; } while (OddMoney < 1 || OddMoney >= Price || OddMoney > 30000); }
void DoIt() { Count = 0; while(Cash >= Price) { NewCash = Cash - Price + OddMoney; Cash = NewCash; Count++; } cout << "Ты сможешь купить " << Count << " банок." << endl; } };
int main() { setlocale(0,"Russian"); CocaCola CocaCola_1; CocaCola_1.Enter(); CocaCola_1.DoIt();
_getch(); return 0; }
Вообще в такой маленькой программе использование классов не совсем уместно, но впихивание их повсюду у меня вошло в привычку :3
P.S. Совет на будущее: Никогда, НИКОГДА не используй goto. Тебе потом будет ох как плохо.
|
|
| |