Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.12.2010, 22:22   #1
Besidnuk
Пользователь
 
Регистрация: 07.11.2010
Сообщений: 17
По умолчанию Алгоритм (Pascal)

Есть такая задача:

Цитата:
Покупатель имеет купюры номиналом А1, А2 ...,Аn, а продавец - В1, В2 ...,Вn. Необходимо найти максимальную стоимость товара Р, какой покупатель не сможет купить из-за того, что не имеет возможности точно рассчитаться за этот товар с продавцом, хотя денег на покупку этого товара у него достаточно.

Входные данные:
строка 1: натуральное число N - количество разных номиналов купюр (1<=N<=10); следующие N строк: тройка натуральных чисел - номиналом купюры (Ск), количество купюр данного номиналу у покупателя (Хк), количество купюр данного номиналу у продавца (Yк).

Выходные данные: Одно натуральное число Р - максимальная стоимость товара, какой покупатель не сможет купить, или 0, если покупатель сможет рассчитаться за любой товар в пределах наличия у него суммы.

Пример:

Входные:

7
1 0 3
2 0 0
5 0 1
10 0 2
20 0 0
50 1 0
100 2 0

Выходные

246


Я думаю тут нужно сначала посчитать сколько будет денег у покупателя. Ето можна зделать за формулой: max = С1*Х1+С2*Х2+...+Сn*Xn. Потом записать в масив все здачи которые может дать продавец. Ну и там отнимать у мах по одному и смотреть может ли дать здачу продавец. А вот и вопрос: За каким алгоритмом можна записать все здачи? Сколько думал, никак не могу придумать.
Besidnuk вне форума Ответить с цитированием
Старый 16.12.2010, 19:04   #2
Besidnuk
Пользователь
 
Регистрация: 07.11.2010
Сообщений: 17
По умолчанию

никто не знает подходящего алгоритма?
Besidnuk вне форума Ответить с цитированием
Старый 16.12.2010, 21:34   #3
Z1000000
Форумчанин
 
Регистрация: 04.05.2010
Сообщений: 495
По умолчанию

Удалил! Написал ошибочное решение.
Нажми на весы, поставь +
Для благодарностей : WebMoney WMR R252732729948

Последний раз редактировалось Z1000000; 16.12.2010 в 21:40.
Z1000000 вне форума Ответить с цитированием
Старый 16.12.2010, 22:08   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Besidnuk
задача сводится к тому, чтобы по заданному массиву с купюрами для любого N получить, можно ли это N выдать через имеющиеся купюры.

честно говоря, я вижу решение только через использование рекурсивной функции (для убыстрения можно использовать отсечение вариантов используя рекурсию c отходом назад), через которую перебирать все варианты. Как только нашли подходящий вариант - выход.

считаем SumMax (максимальную сумму у покупателя).
ну и дальше, уже так, как Вы сказали. крутим цикл от 1 до SumMax - проверяя, может ли это число быть выдано имеющимися у продавца купюрами (кстати, при этом надо брать все купюры и которые у него есть, и у покупателя)...
Как только нашли число, которое НЕ МОЖЕТ быть выдано,
сразу ответ SumMAX - НайденноеЧисло..
если дошли до SumMAX не нашли - значит ответ 0


p.s. если Вам реально нужно и других вариантов решения не нашли и самостоятельно такую функцию написать не получается - пишите, попробую набросать...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 16.12.2010, 22:19   #5
Besidnuk
Пользователь
 
Регистрация: 07.11.2010
Сообщений: 17
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
Besidnuk
задача сводится к тому, чтобы по заданному массиву с купюрами для любого N получить, можно ли это N выдать через имеющиеся купюры.

честно говоря, я вижу решение только через использование рекурсивной функции (для убыстрения можно использовать отсечение вариантов используя рекурсию c отходом назад), через которую перебирать все варианты. Как только нашли подходящий вариант - выход.

считаем SumMax (максимальную сумму у покупателя).
ну и дальше, уже так, как Вы сказали. крутим цикл от 1 до SumMax - проверяя, может ли это число быть выдано имеющимися у продавца купюрами (кстати, при этом надо брать все купюры и которые у него есть, и у покупателя)...
Как только нашли число, которое НЕ МОЖЕТ быть выдано,
сразу ответ SumMAX - НайденноеЧисло..
если дошли до SumMAX не нашли - значит ответ 0


p.s. если Вам реально нужно и других вариантов решения не нашли и самостоятельно такую функцию написать не получается - пишите, попробую набросать...
Ладно, спасибо. Решение мне не нужно, просто я был на турнире из программирования и эту задачу я единственную не сделал. И мне был интересно решение. Ну а рекурсией я пользоваться еще не умею.
Besidnuk вне форума Ответить с цитированием
Старый 16.12.2010, 22:46   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

тему пока не будем закрывать, у нас тут на форуме есть "олимпийцы", попрошу их заглянуть сюда, они что-инбудь ещё обязательно придумают...
вот, хорошо бы LeBron сюда зашёл.. Он реально Гуру!


Цитата:
Ну а рекурсией я пользоваться еще не умею.
Вместо рекурсии можно и перебор прицепить. Просто рекурсией, мне кажется, проще выглядит решение...

Кстати, весьма напрасно не умеете... инструмент, конечно, довольно специфический (далеко не для всех задач имеет смысл его применять), но зато, если он уж подходит - то чрезвычайно мощная штука... для ознакомления, почитайте, например, тут - Методы программрования: переборные алгоритмы
Serge_Bliznykov вне форума Ответить с цитированием
Старый 16.12.2010, 22:49   #7
Besidnuk
Пользователь
 
Регистрация: 07.11.2010
Сообщений: 17
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
тему пока не будем закрывать, у нас тут на форуме есть "олимпийцы", попрошу их заглянуть сюда, они что-инбудь ещё обязательно придумают...
вот, хорошо бы LeBron сюда зашёл.. Он реально Гуру!



Вместо рекурсии можно и перебор прицепить. Просто рекурсией, мне кажется, проще выглядит решение...

Кстати, весьма напрасно не умеете... инструмент, конечно, довольно специфический (далеко не для всех задач имеет смысл его применять), но зато, если он уж подходит - то чрезвычайно мощная штука... для ознакомления, почитайте, например, тут - Методы программрования: переборные алгоритмы
Спасибо, почитаю)
Besidnuk вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Алгоритм Фано(Pascal) makc101 Помощь студентам 0 11.12.2010 12:19
pascal 7, линейный алгоритм prostac Помощь студентам 3 18.12.2009 21:21
Pascal. Алгоритм. HD-boy Помощь студентам 2 12.12.2009 09:10
[Pascal] подскажите алгоритм Рамик Помощь студентам 6 03.03.2009 17:11
Алгоритм для Pascal Trojan-PSW.Win32 Помощь студентам 6 29.01.2008 10:17