Статистика
Всего в нашей базе более 4 327 657 вопросов и 6 445 963 ответов!

Внимание даю 50 баллов

5-9 класс

В конструкторском бюро проектируют планетоход для исследования поверхности
планеты Марс. Исследования должны проводиться на прямоугольной области планеты без
препятствий внутри неё. Эта область разделена на единичные квадраты и имеет
размеры M×N, где M – длина прямоугольника, а N – его ширина.
Планируется, что планетоход должен работать по следующей программе. Вначале
он садится в северо-западном углу заданной области в направлении на восток. После
этогопланетоход начинает обход и исследование выбранной области, двигаясь по
спирали почасовой стрелке. При этом спираль постепенно «закручивается» вовнутрь,
захватывая постепенно все клетки прямоугольника. Исследование заканчивается, когда
пройдены всеклетки.
Требуется написать программу, которая для заданных M и N (1≤M, N ≤ 32767)
определяет количество поворотов, которые должен выполнить планетоход в процессе
исследования области.
Описание входных данных
Входные данные вводятся из файла input.txt. В единственной строке этого файла
через пробел записаны два целых числа M и N (1 ≤ M, N ≤ 32767), размеры
исследуемого прямоугольного участка.
Описание выходных данных
Выходные данные выводятся в файл output.txt. В единственной строке этого файла
необходимо вывести одно целое число – количество поворотов, которое выполнит
планетоход при исследовании заданной области на поверхности Марса.

Golban 21 окт. 2014 г., 1:40:16 (9 лет назад)
Рейтинг
+ 0 -
0 Жалоба
+ 0 -
Evg21986
21 окт. 2014 г., 4:04:17 (9 лет назад)

Рассматривая различные прямоугольники и подсчитывая в них число поворотов P, можно прийти к следующему алгоритму. Для любого натурального k получаем:
P=\begin {cases} 0, \ min(M,N)=1 \\4k-2, \ min(M,N)=2k, \, M=N, \, k \in \mathbb N \\ 4k-1, \ min(M,N)=2k, \, M \neq N, \, k \in \mathbb N  \\ 4k, \ min(M,N)=2k+1, \, M=N, \, k \in \mathbb N \\  4k+1, \ min(M,N)=2k+1, \, M \neq N, \, k \in \mathbb N  \\ \end {cases}

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.


Ответить

Другие вопросы из категории

Напишите программу, которая в последовательности натуральных чисел определяет минимальное число, оканчивающееся на 6. Программа получает на вход

количество чисел в последовательности, а затем сами числа. В последовательности всегда имеется число, оканчивающееся на 6. Количество чисел не превышает 1000. Введенные числа не превышают 30 000. Программа должна вывести одно число минимальное число, оканчивающееся на 6.

Читайте также

Даю много баллов за решение!

написать программу по которой
найти минимальный и максимальный элемент массива и все элементы между ними заменить 0...(10,50)
Срочно



Вы находитесь на странице вопроса "Внимание даю 50 баллов", категории "информатика". Данный вопрос относится к разделу "5-9" классов. Здесь вы сможете получить ответ, а также обсудить вопрос с посетителями сайта. Автоматический умный поиск поможет найти похожие вопросы в категории "информатика". Если ваш вопрос отличается или ответы не подходят, вы можете задать новый вопрос, воспользовавшись кнопкой в верхней части сайта.