![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() |
S_lip |
![]()
Сообщение
#1
|
Новичок ![]() Группа: Пользователи Сообщений: 29 Пол: Мужской Реальное имя: B1-66ER Репутация: ![]() ![]() ![]() |
Здравствуйте!
Вот такая задачка: Дана упорядоченная последовательность N чисел. (2<=N<=200). Каждое число больше 0, но меньше 30000. Нужно из этого ряда найти два набора чисел, величины которых должны быть равны и минимальны. Гарантируется, что эта величина будет меньше 100000. Эту величину нужно выписать. Примеры: Дано: 1 2 3 4 5. Группы чисел: 1 2 и 3. Ответ: 3. Дано: 1 2 5 5 8 10 102. Группы чисел: 5 и 5. Ответ: 5. Дано: 2 3 4 5. Группы чисел: 2 3 и 5. Ответ: 5. Дано: 1 3 5 7 13 21. Группы чисел: 1 7 и 3 5. Ответ: 8. Дано: 1 2 5 8 14. Группы чисел: 1 2 5 и 8. Ответ: 8. Вот я придумал вот такое решение: http://img401.imageshack.us/img401/500/20308125la9.png const Программа перебирает все возможне пары сначало с участием первого числа. Если сумма этих пар больше 100000, а равные величины так и не найдены, то перебирает все возможные пары с участием второго числа и т.д. Это решение кушает очень много памяти и при большом N вылетает. Возможно, есть более элегантное и правильное решение? =) |
![]() ![]() |
S_lip |
![]()
Сообщение
#2
|
Новичок ![]() Группа: Пользователи Сообщений: 29 Пол: Мужской Реальное имя: B1-66ER Репутация: ![]() ![]() ![]() |
Спасибо всем большое за ответы!
klem4, спасибо за код. Я "вроде бы" нашел решение. Чтобы было более понятнее вот текст задачки: Код Давным-давно в высоких горах жил хмельной садовод Чек. У него было два сына Ричибук и Чибирук. Благодаря выращиванию хмеля Чек заработал достаточно большую стопку национальных денег - фугриков. Особенность фугриков в том, что они могут иметь различные номиналы от 1 до 30000. Прошло время, дети стали взрослыми и хотели отправиться искать новые рассады хмеля. Однако, перед отправкой они зашли к отцу и попросить у него денег. Отец жалобно вздохнул и понял, что этого ему не избежать. Но лучше отдать по возможности меньше. Он также понял, что у детей должно быть по равной сумме денег, чтобы никто не обиделся. В первой строке входного файла дано количество фугриков N (2<=N<=200). В каждой следующей строчке содержится число Ai, которое является i-той денежной единицей (1<=Ai<=30000). Числа идут в возрастающем порядке. Нужно найти и выписать сумму денег, которую Чеку придется отдать каждому из сыновей. Гарантируется что всего Чек отдаст не более 100000 фугриков. Автор: Ģirts Folkmanis (www.lio.lv/olimps) - эт, чтоб меня не засудили =P Цифры там немного другие, но это нисколько не меняет суть. Чтобы не нагружать прогу сортировкой, данные уже отсортированы. Вот мое решение: const По моим подсчетам, максимальное количество чисел, которые нужно будет перебирать, будет 16, а не 10, как говори andriano. Это числа 1 2 4 8 16 32 64 128 256 512 1024 2048 4096 8192 16384 и еще одно до 30000. Почему эти числа? Потому, что из 1 2 можно максимум составить 3; из 1 2 4 - 7; 1 2 4 8 - 15 и т.д. "Вроде бы" решил потому, что в тестере (на сайте с условием), этот код не прошел все тесты и в одном дал неправильный ответ. К тестам доступа нет. Может кто-нибудь может найти такие входные данный (основываясь на условие), чтобы эта программа дала неправильный ответ? Сообщение отредактировано: S_lip - 28.12.2007 23:30 |
![]() ![]() |
![]() |
Текстовая версия | 20.07.2025 11:13 |