Оптимизация программы "Золото племени АББА" - 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.

Объяснение кода листинга программы

  1. Функция max принимает два аргумента типа string и возвращает строку. Внутри функции используется переменная max, которая инициализируется значением первого аргумента. Затем происходит сравнение длины второго аргумента с длиной первого. Если длина второго аргумента больше, то значение переменной max присваивается второму аргументу. Если длина обоих аргументов одинакова, то выполняется цикл, в котором сравниваются символы двух строк. Если текущий символ в первом аргументе больше, чем текущий символ во втором аргументе, то значение max присваивается первому аргументу. Если символы равны, то значение max присваивается второму аргументу. Если символы не равны, то значение max присваивается третьему аргументу. Если цикл закончился и третий аргумент не был изменен, то значение max присваивается первому аргументу.
  2. Переменные s, s1, s2 и s3 инициализируются строкой s. Затем из строки s выделяются две подстроки s1 и s2 путем копирования первых n-1 символов из s. Подстрока s3 инициализируется оставшимися символами из s.
  3. Программа открывает файл input.txt для чтения, считывает строку из файла и сохраняет ее в переменной s. Затем программа закрывает файл input.txt.
  4. Программа открывает файл output.txt для записи и записывает в него результат работы функции max, который является самой длинной подстрокой из s1, s2 и s3. Затем программа закрывает файл output.txt.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

12   голосов , оценка 4.167 из 5
Похожие ответы