adil78245
11.01.2022 11:11

Задачка Toxins. В популярной настольной игре задача состоит в том, чтобы провести фишку по определенному маршруту. Поле представляет собой прямоугольник, состоящий из квадратных ячеек. Игрок может за один ход перейти в одну из четырех соседних по сторонам ячеек, не выходя при этом за пределы поля. Игрок начинает свой путь в любой ячейке самого левого столбца и должен попасть в любую клетку самого правого столбца игрового поля. Но отдельные ячейки токсичны, их расположение известно. Вася выяснил, что чем больше расстояние от токсичной ячейки, тем безопаснее маршрут, расстояние рассчитывается как количество ходов ячейками токсичных ячеек до каждой ячейки маршрута ему определить, на какое минимальное расстояние придется подойти к токсичной ячейке, двигаясь по самому безопасному маршруту.
Технические условия. Программа Toxins читает с устройства стандартного ввода первой строки записаны натуральные числа N и M (1 ≤ N, M≤500) - количество строк и столбцов на игровом поле, во второй строке записано натуральное число K (1≤K≤500) - количество токсичных ячеек . В следующих K строке записаны пары чисел Ri Ci (1≤Ri≤N, 1≤Ci≤M) – координаты токсичных ячеек (строка, столбец). Программа выводит на устройство стандартного вывода минимальное расстояние, на которое придется приближаться к токсичной ячейке на безопасном маршруте.
Нужно решить на языке Pascal, в среде жизнь человеку

Нажмите на рекламу ниже и сразу увидите ответ
Популярные вопросы:
Ответ:
МагистрСемен
17.07.2020 03:52
Const
    handsfree = false;

var
    a: array[1..500] of integer;
    i, n, j: integer;
    temp: integer;

begin
    {ввод массива}
    if handsfree then
        n := random(500) + 1
    else begin
        write('n = ');
        readln(n);
    end;
    
    writeln('Данные массива:');
    for i := 1 to n do
    begin
        if handsfree then begin
            a[i] := random(100000);
            write(a[i], ' ');
        end
        else readln(a[i]);
    end;
    writeln();
    
    {сортировочка пузыречком по убыванию}
    for i := 1 to n - 1 do
        for j := i + 1 to n do
            if A[i] < A[j] then begin
                temp := A[i];
                A[i] := A[j];
                A[j] := temp;
            end;
    
    {вывод массива}
    writeln('Вывод массива:');
    for i := 1 to n do
        write(a[i], ' ');
    writeln();
    
    writeln('Наибольшая купюра = ', a[1], a[2]);
end.

Вывод (при handfree = true)
Данные массива:
14326 83146 41199 15524 45803 60252 17062 77469 66347 48671 98328 61915 65607 88427 62486 50724 86714 97620 39326 61552 6654 93608 22718 77352 63933 29408 99498 63255 23230 7413 67602 67278 76628 87483 71421 12343 30770
Вывод массива:
99498 98328 97620 93608 88427 87483 86714 83146 77469 77352 76628 71421 67602 67278 66347 65607 63933 63255 62486 61915 61552 60252 50724 48671 45803 41199 39326 30770 29408 23230 22718 17062 15524 14326 12343 7413 6654
Наибольшая купюра = 9949898328
0,0(0 оценок)
Ответ:
SkylloutBrain
22.10.2022 18:27
Поскольку тут речь о последовательности неизвестной длины, вводимой с клавиатуры до появления нуля, а условие позволяет для каждого вводимого числа сразу решить, должно ли оно входить в сумму, задача решается без использования массива и условие "Количество чисел не превышает 1000" - это просто ловушка для наивных с тем, чтобы в случае использования массива длиной 1000 объявить затем решение неэффективным по памяти.

1. Решение на современной версии Паскаля
PascalABC.NET 3.2, сборка 1389 от 01.03.2017
Внимание! Если программа не работает, обновите версию!

begin
  var s:=ReadSeqIntegerWhile(n->n<>0)
      .Where(n->(n mod 3=0) and (n mod 10=6)).Sum;
  Writeln('Сумма отобранных чисел равна ',s)   
end.

Пример
15 36 26 72 25 96 83 0
Сумма отобранных чисел равна 132

2. Решение "по-школьному"

var
  n,s:integer;
begin
  s:=0;
  repeat
    Read(n);
    if (n mod 3=0) and (n mod 10=6) then s:=s+n
  until n=0;
  Writeln('Сумма отобранных чисел равна ',s)
end.

Пример
15 36 26 72 25 96 83 0
Сумма отобранных чисел равна 132
0,0(0 оценок)
Полный доступ
Позволит учиться лучше и быстрее. Неограниченный доступ к базе и ответам от экспертов и ai-bota Оформи подписку
logo
Начни делиться знаниями
Вход Регистрация
Что ты хочешь узнать?
Спроси ai-бота