Оптимизация программы "Золото племени АББА" - Pascal
Формулировка задачи:
Помогите оптимизировать, если что задача:
(Ссылка на сторонний ресурс удалена)
(Время: 1 сек. Память: 16 Мб Сложность: 40%)
Главный вождь племени Абба не умеет считать. В обмен на одну из его земель вождь другого племени предложил ему выбрать одну из трех куч с золотыми монетами. Но вождю племени Абба хочется получить наибольшее количество золотых монет. Помогите вождю сделать правильный выбор!
Входные данные
В первой строке входного файла INPUT.TXT записаны три натуральных числа через пробел. Каждое из чисел не превышает 10100.
Выходные данные
В выходной файл OUTPUT.TXT нужно вывести одно целое число — максимальное количество монет, которые может взять вождь.
Примеры
№ | INPUT.TXT | OUTPUT.TXT |
1 | 5 7 3 | 7 |
2 | 987531 234 86364 | 987531 |
3 | 189285 283 4958439238923098349024 | 4958439238923098349024 |
var a:array[1..3] of string; p,k,i,max,n,g:byte; c,h,e:string; begin assign(input,'input.txt'); reset(input); assign(output,'output.txt'); rewrite(output); read(e); k:=1; n:=length(e); g:=1; for i:=1 to n do begin if copy(e,i,1)=' ' then inc(g) else a[g]:=a[g]+copy(e,i,1); end; for i:=1 to 3 do if length(a[i])>max then begin p:=i; max:=length(a[i]); end else if length(a[i])=max then begin c:=a[i]; h:=a[p]; while k<>max+1 do begin if (ord(c[k])-48)>(ord(h[k])-48) then begin p:=i; break; end else if (ord(c[k])-48)<(ord(h[k])-48) then break else if (ord(c[k])-48)=(ord(h[k])-48) then inc(k); end; k:=1; end; write(a[p]); end.
Решение задачи: «Оптимизация программы "Золото племени АББА"»
textual
Листинг программы
function max(s1,s2:string):string; var i:byte; begin max:=s1; if length(s2)>length(s1)then max:=s2 else if length(s2)=length(s1)then begin i:=1; while s1[i]=s2[i] do if s1[i]>s2[i] then max:=s1 else if s1[i]<s2[i] then max:=s2 else inc(i) end end; var f:text; s,s1,s2,s3:string; begin assign(f,'input.txt'); reset(f); readln(f,s); s1:=copy(s,1,pos(' ',s)-1); delete(s,1,pos(' ',s)); s2:=copy(s,1,pos(' ',s)-1); delete(s,1,pos(' ',s)); s3:=s; close(f); assign(f,'output.txt'); rewrite(f); write(f,max(max(s1,s2),s3)); close(f) end.
Объяснение кода листинга программы
- Функция
max
принимает два аргумента типаstring
и возвращает строку. Внутри функции используется переменнаяmax
, которая инициализируется значением первого аргумента. Затем происходит сравнение длины второго аргумента с длиной первого. Если длина второго аргумента больше, то значение переменнойmax
присваивается второму аргументу. Если длина обоих аргументов одинакова, то выполняется цикл, в котором сравниваются символы двух строк. Если текущий символ в первом аргументе больше, чем текущий символ во втором аргументе, то значениеmax
присваивается первому аргументу. Если символы равны, то значениеmax
присваивается второму аргументу. Если символы не равны, то значениеmax
присваивается третьему аргументу. Если цикл закончился и третий аргумент не был изменен, то значениеmax
присваивается первому аргументу. - Переменные
s
,s1
,s2
иs3
инициализируются строкойs
. Затем из строкиs
выделяются две подстрокиs1
иs2
путем копирования первыхn-1
символов изs
. Подстрокаs3
инициализируется оставшимися символами изs
. - Программа открывает файл
input.txt
для чтения, считывает строку из файла и сохраняет ее в переменнойs
. Затем программа закрывает файлinput.txt
. - Программа открывает файл
output.txt
для записи и записывает в него результат работы функцииmax
, который является самой длинной подстрокой изs1
,s2
иs3
. Затем программа закрывает файлoutput.txt
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д