Форум программистов, компьютерный форум CyberForum.ru

Задача: Покупка цветов - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 5.00
Алексей Хомяков
1 / 1 / 0
Регистрация: 21.03.2011
Сообщений: 6
21.03.2011, 20:13     Задача: Покупка цветов #1
Помогите решить задачу

На День учителя Вася решил купить букет цветов. В магазине продаются ромашки по A рублей за штуку и гладиолусы по B рублей за штуку (A < B). У Васи есть C рублей. Он хочет составить букет из максимально возможного количества цветов, и при этом потратить как можно больше денег. Другими словами, из всех букетов с максимально возможным количеством цветов он хочет выбрать самый дорогой, но не дороже C рублей. Помогите ему вычислить стоимость такого букета.
Входные данные

Стандартный поток ввода содержит три целых числа A, B, C (1 ≤ A < B ≤ 100, 0 ≤ C ≤ 1000).
Выходные данные

Выведите в стандратный поток вывода одно число - стоимость самого дорогого букета из максимального количества цветов.
например
Входные данные
2 3 11
Результат работы
11
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
neurosis
0 / 0 / 0
Регистрация: 18.09.2009
Сообщений: 15
24.03.2011, 16:09     Задача: Покупка цветов #2
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
32
33
34
35
36
#include <stdio.h>
 
int main()
{
    int A=0, B=0, C=0, dss, gls=0, change;
    
    printf("Сколько денег? ");
    scanf("%d",&C);
    printf("Цена ромашки? ");
    scanf("%d",&A);
    printf("Цена гладиолуса? ");
    scanf("%d",&B);
    
    if(A>=B || (A<1 || A>=100) || (B<=1 || B>100) || (C<0 || C>1000))
    {
        printf("Читай условия задачи, сука!\n");
        return 0;
    }
    
    if(C<A)
    {
        printf("Мало денег\n");
        return 0;
    }
    
    dss=C/A;
    change=C%A;
    if(A+change>=B)
    {
        gls=1;
        dss--;
    }
    
    printf("Букет из %d ромашки(ек) и %d гладиолуса(ов) обойдется в %d р., Ваша сдача %d р.\n",dss,gls,dss*A+gls*B,change);
    return 0;
}
researcher
Сообщений: n/a
31.03.2011, 02:24     Задача: Покупка цветов #3
Данный код составлен неверно.
Достаточно подставить другие значения:
С = 124 р.
А = 25 р/шт.
В = 26 р/шт.
5*А - перебор
5*В = 104 - верное решение: букет из максимально возможного количества цветов, и при этом потратить как можно больше денег
Приведенный выше код возвращает следующий результат:
Букет из 3 ромашки(ек) и 1 гладиолуса(ов) обойдется в 101 р., Ваша сдача 24 р.
См. http://ideone.com/doKnj

Добавлено через 20 минут
Опечатался, а вносить исправления данный форум не дает, поэтому заново с другими значениями:
Данный код составлен неверно.
Достаточно подставить другие значения:
С = 149 р.
А = 25 р/шт.
В = 26 р/шт.
6*А = 150 р. - перебор
5*А = 125 р.
5*В = 130 р. - верное решение: букет из максимально возможного количества цветов, и при этом потратить как можно больше денег
Приведенный выше код возвращает следующий результат:
Букет из 4 ромашки(ек) и 1 гладиолуса(ов) обойдется в 126 р., Ваша сдача 24 р.
См. http://ideone.com/iKmnY
gGrn-7DA
мну довольно <(-__-)l
 Аватар для gGrn-7DA
203 / 192 / 1
Регистрация: 17.01.2010
Сообщений: 2,391
Завершенные тесты: 1
01.04.2011, 20:32     Задача: Покупка цветов #4
а в чем проблема?
C++
1
2
3
4
int mac_count_flower = c/a;
int b_count = mac_count_flower;
while(b_count*b>c) b_count--;
int a_count=mac_count_flower-b_count;
Я так понимаю основная ошибка в отсутствии while(), за место него стоит 1 if()
все...
neurosis
0 / 0 / 0
Регистрация: 18.09.2009
Сообщений: 15
01.04.2011, 21:22     Задача: Покупка цветов #5
да, прошу прощения, ошибка действительно имеет место, код особо не тестил
gGrn-7DA
мну довольно <(-__-)l
 Аватар для gGrn-7DA
203 / 192 / 1
Регистрация: 17.01.2010
Сообщений: 2,391
Завершенные тесты: 1
01.04.2011, 21:27     Задача: Покупка цветов #6
C++
1
2
3
4
int max_count_flower = c/a;
int sdacha=c%a;
int b_count=sdacha/(b-a);
int a_count=max_count_flower-b_count;
Так будет еще правильнее.
researcher
Сообщений: n/a
03.04.2011, 02:25     Задача: Покупка цветов #7
Задача олимпиадная , правда юнит тест то ли случайно то ли умышленно (дабы отсечь ответы подобные тому что дал neurosis) составили неграмотно...

В ответе с while ошибка, хотя, он близок к истине.

Изменим, приведенный выше, юнит (тоже не перекрывает некоторые пограничные соответствия)
С = 136 р.
А = 25 р/шт.
В = 28 р/шт.
Верное решение:
А*2 + В*3 = 50 + 84 = 134
Приведенный код вернет значение
Букет из 1 ромашки(ек) и 4 гладиолуса(ов) обойдется в 137 р., Ваша сдача -1 р.
Т.к. while(B*4 > C) => 112 > 136 => false и гладиолусов останется 4
//****************************************************************
Для проверки второго решения лучше использовать предыдущий юнит:
С = 149 р.
А = 25 р/шт.
В = 26 р/шт.
C++
1
2
3
4
int max_count_flower = c/a = 149/25 = 5; //***0.96***
int sdacha=c%a = 24;
int b_count=sdacha/(b-a) = 24/1 = 24;
int a_count=max_count_flower-b_count = 5 - 24 = -19;
//******************************************************************
Алгоритм достаточно прост:
//математикой, конечно, можно все запутать и одну головоломку превратить в другую, но чем проще программный код, тем он легче сопровождается и модифицируется под другие условия;
1. Максимальное количество получаем складывая самые дешевые цветы пока их сумма не выйдет за пределы наличной суммы (С): 25 + 25 + 25 + 25 + 25 = 125 < 136;
2. Заменяем по одному цветку с дешевого на более дорогой и проверяем общую сумму пока не достигнем максимально возможной величины:
А*2 + В*3 = 25*2 + 28*3 = 50 + 84 = 134 < 136;
// while вполне подойдет, только граничные условия следует четко определять и тестировать (хотя бы изредка)
instagib
122 / 85 / 3
Регистрация: 14.02.2011
Сообщений: 341
03.04.2011, 03:54     Задача: Покупка цветов #8
Цитата Сообщение от neurosis Посмотреть сообщение
C++
1
if(A>=B || (A<1 || A>=100) || (B<=1 || B>100) || (C<0 || C>1000)) { printf("Читай условия задачи, сука!\n"); return 0; }
lol
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.04.2011, 10:55     Задача: Покупка цветов
Еще ссылки по теме:

C++ Строки разных цветов
C++ Получение цветов GetBitmapBits()
Массив цветов C++

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

Или воспользуйтесь поиском по форуму:
gGrn-7DA
мну довольно <(-__-)l
 Аватар для gGrn-7DA
203 / 192 / 1
Регистрация: 17.01.2010
Сообщений: 2,391
Завершенные тесты: 1
03.04.2011, 10:55     Задача: Покупка цветов #9
Ну просто добавить проверку и все)
C++
1
2
3
4
5
int max_count_flower = c/a;
int sdacha=c%a;
int b_count=sdacha/(b-a);
b_count=b_count>max_count_flower?max_count_flower:b_count;
int a_count=max_count_flower-b_count;
Добавлено через 54 секунды
Я ж код не тестил, да и писал прям в форму коментария)
Yandex
Объявления
03.04.2011, 10:55     Задача: Покупка цветов
Ответ Создать тему
Опции темы

Текущее время: 06:17. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru