ПАСКАЛЬ. Вова попал на космическом корабле на бесконечную плоскую планету в точку с координатами (x1, y1). Вова, управляя корабл
ем, имеет возможность за одну секунду телепортироваться из точки (x, y) в одну из точек (x+C, y+C), (x+C, y-C), (x-C, y+C), (x-C, y-C), где C - произвольное натуральное число, которое можно изменять на каждом ходу.
Требуется написать программу, которая определит, через какое минимальное время Вове удастся достичь точки (x2, y2).
Входные данные
Входной файл INPUT.TXT содержит в первой строке числа x1, y1, во второй – x2, y2. Все числа целые от нуля до 106. Точки (x1, y1) и (x2, y2) не совпадают.
Выходные данные
Выходной файл OUTPUT.TXT должен содержать одно число – минимальное время телепортации. Если такая телепортация невозможна, то вывести 0.
1. Заметим, что такими манипуляциями нельзя поменять чётность произведения xy, где (x, y) - текущие координаты корабля. Если угодно, можно представить бесконечное поле для шахмат, корабль ходит как слон - только по диагонали, поэтому цвет поля не меняется. 2. Естественно "развернуть" координаты так, чтобы "горизонтальное" и "вертикальное" направления были вдоль диагоналей. Это делается путем преобразования x' = x + y, y' = x - y. 3. В новых координатах корабль может ходить по горизонтали и вертикали, при этом в любую достижимую точку он придет не более чем за 2 шага. За 1 шаг он придет, если стоит в той же горизонтали или вертикали. 4. Для простоты сдвинем начало координат в начальную точку, тогда точка назначения будет иметь координаты x' = (x2 - x1) + (y2 - y1), y' = (x2 - x1) - (y2 - y1)
Решение, PascalABC.NET:
begin var inf := OpenRead('INPUT.TXT'); var outf := OpenWrite('OUTPUT.TXT'); var x1, x2, y1, y2: longint; read(inf, x1, y1, x2, y2); if (x1 * y1 - x2 * y2) mod 2 = 0 then begin (x2, y2) := ((x2 - x1) + (y2 - y1), (x2 - x1) - (y2 - y1)); if x2 * y2 = 0 then write(outf, 1) else write(outf, 2); end else write(outf, 0); close(inf); close(outf); end.
begin
for i := 1 to 5 do
read(ar[i]);
window.IsFixedSize := true;
window.Init(0, 0, 800, 800, clDarkGray);
window.CenterOnScreen;
SetFontSize(32);
for i := 1 to 5 do c := c + ar[i].ToString.Length;
for i := 1 to 7 do writeln;
write(' ':33 - c);
for i := 1 to 5 do
begin
if(ar[i] mod 2 = 0) and (ar[i] mod 10 <> 0) then begin
SetFontColor(clred);
write(ar[i]);
end
else if(ar[i] mod 10 = 0) then begin
SetFontColor(clblue);
write(ar[i]);
end
else if(ar[i] mod 2 <> 0) then
begin
SetFontColor(clyellow);
write(ar[i]);
end
end; end.
Итак, треугольник может существовать, если сумма длин двух его сторон больше третий стороны. Алгоритм такой: Принимаем значения a b c Если(a + b < c или a + c < b или c + b < a) Вернуть ложь Иначе Вернуть истину
#1 алг нач нц пока не слева свободно закрасить вниз кц вверх нц пока справа свободно вправо закрасить кц нц пока не справа свободно закрасить вверх кц вниз кон