Консультация № 178210
04.05.2010, 23:22
45.00 руб.
0 3 1

Задание № 20.
Алгоритм решения задачи по теме "Динамические структуры данных" или "Рекурсия"

Помогите решить пожайлуста... текст программы напигите полностью пожайлуста...

Обсуждение

Неизвестный
05.05.2010, 20:15
общий
это ответ
Здравствуйте, Евтеев Алексей Николаевич.
Текст программы прилагается. Тестирование производилось на значениях 1..36 (до миллиарда как-то грустно тестировать). Путь всегда прокладывается в направлении N -> M (N >= M).

Приложение:
Uses
Crt;
Const
ifn = 'input.txt';
ofn = 'output.txt';
Var
M, N, i, path, ml, nl: Longint;
fn: Text;

procedure loadParams;
var
st: String;
code: integer;
temp: Longint;
begin
Assign(fn, ifn);
Reset(fn);
Readln(fn, st);
Close(fn);

Writeln(st);
Val(Copy(st, 1, pos(' ', st) - 1), M, code);
Delete(st, 1, pos(' ', st) - 1);
While (pos(' ', st) = 1) do
Delete(st, 1, 1);
Val(Copy(st, 1, length(st)), N, code);
if (M > N) then begin
temp := M;
M := N;
N := temp;
end;
ml := Trunc(Sqrt(M));
if (Sqr(ml) < M) then
Inc(ml);
nl := Trunc(Sqrt(N));
if (Sqr(nl) < N) then
Inc(nl);
Writeln('M = ', M, ', ml = ', ml);
Writeln('N = ', N, ', nl = ', nl);
end;

procedure saveResult;
begin
Assign(fn, ofn);
Rewrite(fn);
Write(fn, path);
Close(fn);
end;

procedure findPath(m, n: Longint; var path: Longint);
begin
Write(n);
if (m = n) then begin
Writeln;
end else begin
Write(' -> ');
Inc(path);
if (n = Sqr(Trunc(Sqrt(n)))) or ((ml = nl) and (n > m)) then begin
findPath(m, n - 1, path);
Exit;
end;
if (n = Sqr(Trunc(Sqrt(n))) + 1) or ((ml = nl) and (n < m)) then begin
findPath(m, n + 1, path);
Exit;
end;
if Odd(Sqr(nl) - n) then begin
Dec(nl);
Dec(n, 2*nl);
findPath(m, n, path);
end else begin
if ((m-Sqr(ml-1) < n-Sqr(nl-1))) then
findPath(m, n - 1, path)
else
findPath(m, n + 1, path)
end;
end;
end;

begin
ClrScr;
loadParams;
path := 0;
findPath(M, N, path);
Writeln('Length of path: ', path);
saveResult;
Write('Done. Press any key...');
readkey;
end.
5
спасибо большое... а что такое ml и nl
Неизвестный
05.05.2010, 21:36
общий
для чего тут ml и nl объясните пожайлуста
Неизвестный
05.05.2010, 23:24
общий
Евтеев Алексей Николаевич:
Цитата: 329038
для чего тут ml и nl объясните пожайлуста
Это уровни (level) на которых находятся соответственно числа M и N. Я использовал их для прокладки минимального пути. По уровню можно определить к какому соседу выгоднее передвигаться.
Форма ответа