Вторник, 26 Ноября 2024, 21:04

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Олимпиадная задача
DeswingДата: Среда, 05 Декабря 2012, 17:58 | Сообщение # 1
заслуженный участник
Сейчас нет на сайте
Задача "Кока-кола"

Одна баночка кока-колы стоит B рублей. Пустую баночку из-под кока-колы можно сдать и получить за неё E рублей.
У Васи есть R рублей. Он покупает кока-колу, выпивает её, сдаёт баночку, снова покупает кока-колу и так далее до тех пор, пока имеющихся у него денег (после сдачи очередной баночки) хватает на покупку кока-колы.
Сколько всего банок кока-колы он выпьет?

Формат ввода
Вводится три натуральных числа B,E,R (1<=E<B<=30000, 1<=R<=30000)

Формат вывода
Выведите одно число - количество баночек, которое сможет выпить Вася.

Помогите пожалуйста. Сам целый день долблю - не могу разобраться smile Причём даже школьный учитель (хотя она, видимо, лишь поверхностно знает ЯПы) не может решить. Я всё делал, пытался. Заводил счетчик, делал "буфер" - но всё равно у меня было что-то не так с формулами, т.к. выводились числа, которые не соответствуют решению задачи. Если покажите как нужно было делать - буду очень благодарен (ОЧЕНЬ. Ну помогите же новичку! smile ).


Сообщение отредактировал Deswing - Среда, 05 Декабря 2012, 18:00
OlegDSXДата: Среда, 05 Декабря 2012, 18:30 | Сообщение # 2
участник
Сейчас нет на сайте
Я C++ не шарю, так что пишу просто biggrin

b=10
e=5
r=100

цикл пока r > b делать
он покупает r=r-b
он сдает r=r+e
сетчик: k=k+1

уловие цикла невыполнино
вывести к
ApatiДата: Среда, 05 Декабря 2012, 18:37 | Сообщение # 3
заслуженный участник
Сейчас нет на сайте
Quote (OlegDSX)
r > b

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)
---------------------------------------------

Quote (Apati)
>=

не, если ставить ещё и "=", то получится, что в каком-то определенном случае он уберет единицу. А так он спокойно все поделит и цикл завершится
EchoITДата: Среда, 05 Декабря 2012, 21:48 | Сообщение # 5
старожил
Сейчас нет на сайте
Quote
У Васи

После этого я сразу понял, откуда задача. biggrin
Я бы тебе помог, но в 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
заслуженный участник
Сейчас нет на сайте
Quote (Deswing)
смогу О_о

Тогда условие >= подойдет лучше
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. Тебе потом будет ох как плохо.
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг