Top.Mail.Ru
Ответы
Аватар пользователя
7лет
Изменено
Аватар пользователя
Аватар пользователя
Аватар пользователя
Программирование
+2

Помогите оптимизировать код на Pascal

В файле file.txt в первой строчке число 4, во второй четыре разных числа
нужно
выбирать два из них и, если они одинаковые, одно из них стереть. Если числа разные, то он вычитает из большего числа меньшее до тех пор, пока они не станут одинаковыми. В конце концов должно остаться одно число. его нужно записать в файл fileof.txt

нужно что бы программа выполнялась меньше чем за 1 сек

var
i, x: longint;
f: text;
t: array[1..4] of longint;
begin
Assign(f, 'file.txt');
Reset(f);
readln(f, x);
for i := 1 to 4 do read(f, t[i]);
close(f);
for i := 4 downto 2 do
begin
if t[i] = t[i - 1]
then t[i] := 0
else begin
repeat
if t[i] > t[i - 1]
then t[i] := t[i] - t[i - 1]
else t[i - 1] := t[i - 1] - t[i];
until t[i] = t[i - 1];
t[i] := 0;
end;
end;
Assign(f, 'fileof.txt');
rewrite(f);
write(f,t[1]);
close(f);
end.

По дате
По рейтингу
Аватар пользователя
Новичок
7лет

Плохое описание задания. Я не понял.

> В файле file.txt в первой строчке число 4
может там число чисел, которые во второй строке?

> выбирать два из них
какие два?

> до тех пор, пока они не станут одинаковыми
а что, если они никогда не станут одинаковыми? Например, числа 3 и 2.

Аватар пользователя
Мыслитель
7лет

repeat
if t[i] > t[i - 1]
then t[i] := t[i] mod t[i - 1]
else t[i - 1] := t[i - 1] mod t[i];
until t[i] = 0;

Вроде так. но паскалем давно не занимался не помню. Не правильно написал. но уже подправил. А вообще нужно немного править так как может так получиться что t[i-1] станет нулем (если остаток от деления равен нулю то значит число на которое делили и есть требуемое)