![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Пользователь
Регистрация: 23.04.2016
Сообщений: 75
|
![]()
Привет, существует задача.. С первого взгляда она простая, но стоит углубиться и возникнут трудности...
Главный вождь племени Абба не умеет считать. В обмен на одну из его земель вождь другого племени предложил ему выбрать одну из трех куч с золотыми монетами. Но вождю племени Абба хочется получить наибольшее количество золотых монет. Помогите вождю сделать правильный выбор! Входные данные В первой строке входного файла INPUT.TXT записаны три натуральных числа через пробел. Каждое из чисел не превышает 10100. Выходные данные В выходной файл OUTPUT.TXT нужно вывести одно целое число — максимальное количество монет, которые может взять вождь. Примеры INPUT.TXT ||||OUTPUT.TXT 1 5 7 3 ||||7 2 987531 234 86364 ||||987531 3 189285 283 4958439238923098349024 ||||4958439238923098349024 =============================== Я попробовал ее решить через процедуры, запоминал числа массивами и выводил так же.. Осталось самое главное сравнение трех массивов, получается. Этого я сделать не смог. ВОт код: Код:
|
![]() |
![]() |
![]() |
#2 |
Форумчанин
Регистрация: 25.01.2015
Сообщений: 474
|
![]()
В данной задаче именно длинная арифметика не очень-то и нужна.
Т.к. считываешь отдельные символы/цифры в массив. В результате - три массива. Тот что длиннее - тот и больше. А при равной длине - придётся сравнивать поразрядно начиная со старшего. Современный Pascal (Delphi/FPC/PABC.NET) оперирует со строками значительных размеров. Это я к тому, что можно схалтурить и часть работы по длинной арифметике переложить на Runtime Library - сравнение строк. Кстати, если идти вашим способом, ввод можно организовать так Код:
|
![]() |
![]() |
![]() |
#3 |
Пользователь
Регистрация: 23.04.2016
Сообщений: 75
|
![]()
FPaul, знаете, я тоже хотел идти преобразованием массивов в строки, потом сравнивать длину их. И правильно вы заметили, длина может совпадать. Тогда придется сравнивать по первому символу строки и так далее.. Но на мой взгляд, это не совсем оптимизировано, потому жду лучших вариантов =)
|
![]() |
![]() |
![]() |
#4 |
Старожил
Регистрация: 17.11.2010
Сообщений: 18,922
|
![]()
10100 это 10^100? Дык вполне обычная строка и для турбо паскаля. Нолик впереди не должен быть по идее, как-то натуральность не вяжется с ведущим нулем. Какая строка длиннее, та и победила. При равенстве длин - просто какая больше обычным сравнением. По-разрядное сравнение ни к чему. Даже если очень вдруг нолики впереди - их можно отбросить
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Последний раз редактировалось Аватар; 14.06.2016 в 21:10. |
![]() |
![]() |
![]() |
#5 |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
![]() Что было, то и будет; и что делалось, то и будет делаться, и нет ничего нового под солнцем. Бывает нечто, о чем говорят: "смотри, вот это новое"; но это было уже в веках, бывших прежде нас. Нет памяти о прежнем; да и о том, что будет, не останется памяти у тех, которые будут после. Всё уже было: Олимпиадная задача "Золото племени АББА" на Pascal (№7 с acmp.ru) |
![]() |
![]() |
![]() |
#6 | |
Пользователь
Регистрация: 23.04.2016
Сообщений: 75
|
![]() Цитата:
![]() ![]() P.S. если не подключать библиотеки, содержащие такие типы и классы) Последний раз редактировалось NikiToZz_; 15.06.2016 в 12:21. |
|
![]() |
![]() |
![]() |
#7 | |
Старожил
Регистрация: 17.11.2010
Сообщений: 18,922
|
![]()
10^100 - откуда 400 цифр?
Цитата:
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
|
|
![]() |
![]() |
![]() |
#8 |
Пользователь
Регистрация: 23.04.2016
Сообщений: 75
|
![]()
Не могу успокоиться =) Доделал программу, сравниваю числа функциями перебора массивов..
Возникает RunError(2) на 95 строке (здесь: Код:
Код:
|
![]() |
![]() |
![]() |
#9 |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
![]()
в ваших нагромождениях кода даже разбираться не хочется...
Да и алгоритмы для решения используются, мягко говоря, не ахти. Если я правильно понял, Вы три раза вызываете ТРИ разные процедуры, чтобы сравнить одни и те же массивы? Не приходило в голову, что нужна ОДНА процедура, которая сравнивает ДВА массива и возвращает результат, какой из них больше или возвращает больший из массивов?! а что касается ошибки. 1) проверьте, что Вы нигде не описали переменные Input и Output (если описали - удалите описание этих предопределённых переменных). 2) прямо в начале программы напишите строго так, как рекомендовано в методичке на сайте: Код:
|
![]() |
![]() |
![]() |
#10 |
Форумчанин
Регистрация: 25.01.2015
Сообщений: 474
|
![]()
NikiToZz_, посмотри на такую реализацию.
Я оформил ввод по условию - в строке три числа Код:
Код:
Для решения задачи с acmp.ru во избежании ненужного копирования лучше сравнивать по указателям и возвращать указатель на максимальное число. Последний раз редактировалось FPaul; 15.06.2016 в 13:51. |
![]() |
![]() |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Олимпиадная задача "Золото племени АББА" на Pascal (№7 с acmp.ru) | Ghost3 | Помощь студентам | 19 | 17.01.2013 21:04 |
Сравнить две программы. Одну из самых первых и одну из последний | coNsept | Свободное общение | 8 | 23.03.2012 23:21 |
Выбрать одну таблицу или много | grom333 | БД в Delphi | 7 | 12.10.2011 02:51 |
какой выбрать протокол, если есть сервер в интернете, и клиент должен передать ему команды | anyx | Работа с сетью в Delphi | 3 | 25.09.2009 23:13 |
Число N, заменить одну из его цифр, чтобы получилось число, max близкое к некоторой степени двойки | urgu_st | Помощь студентам | 13 | 23.10.2007 09:14 |