Предмет: Информатика,
автор: Аноним
Внимание даю 50 баллов
В конструкторском бюро проектируют планетоход для исследования поверхности
планеты Марс. Исследования должны проводиться на прямоугольной области планеты без
препятствий внутри неё. Эта область разделена на единичные квадраты и имеет
размеры M×N, где M – длина прямоугольника, а N – его ширина.
Планируется, что планетоход должен работать по следующей программе. Вначале
он садится в северо-западном углу заданной области в направлении на восток. После
этогопланетоход начинает обход и исследование выбранной области, двигаясь по
спирали почасовой стрелке. При этом спираль постепенно «закручивается» вовнутрь,
захватывая постепенно все клетки прямоугольника. Исследование заканчивается, когда
пройдены всеклетки.
Требуется написать программу, которая для заданных M и N (1≤M, N ≤ 32767)
определяет количество поворотов, которые должен выполнить планетоход в процессе
исследования области.
Описание входных данных
Входные данные вводятся из файла input.txt. В единственной строке этого файла
через пробел записаны два целых числа M и N (1 ≤ M, N ≤ 32767), размеры
исследуемого прямоугольного участка.
Описание выходных данных
Выходные данные выводятся в файл output.txt. В единственной строке этого файла
необходимо вывести одно целое число – количество поворотов, которое выполнит
планетоход при исследовании заданной области на поверхности Марса.
Ответы
Автор ответа:
0
Рассматривая различные прямоугольники и подсчитывая в них число поворотов P, можно прийти к следующему алгоритму. Для любого натурального k получаем:
var
M, N, k, mn, P: integer;
f: Text;
begin
Assign(f, 'input.txt');
Reset(f);
Readln(f, M, N);
Close(f);
if M < N then mn := M else mn := N;
if mn = 1 then P := 0
else begin
k := mn div 2;
if mn mod 2 = 0 then
if M = N then P := 4 * k - 2
else P := 4 * k - 1
else
if M = N then P := 4 * k
else P := 4 * k + 1
end;
Assign(f, 'output.txt');
Rewrite(f);
Writeln(f, P);
Close(f)
end.
var
M, N, k, mn, P: integer;
f: Text;
begin
Assign(f, 'input.txt');
Reset(f);
Readln(f, M, N);
Close(f);
if M < N then mn := M else mn := N;
if mn = 1 then P := 0
else begin
k := mn div 2;
if mn mod 2 = 0 then
if M = N then P := 4 * k - 2
else P := 4 * k - 1
else
if M = N then P := 4 * k
else P := 4 * k + 1
end;
Assign(f, 'output.txt');
Rewrite(f);
Writeln(f, P);
Close(f)
end.
Приложения:
Похожие вопросы
Предмет: Физика,
автор: copybil
Предмет: Математика,
автор: antimuzika04
Предмет: Литература,
автор: minushin21
Предмет: История,
автор: natohka11
Предмет: Алгебра,
автор: irinazazigina