Вывести порядок, в котором находятся машины после обработки всех сообщений - Pascal

Узнай цену своей работы

Формулировка задачи:

В гонках "Формулы N" участвует N машин. В результате квалификационного заезда машины получили порядковые номера и стартовали в порядке от 1 до N. Вася - страстный поклонник гонок, но у него в общежитии плохой интернет и он не может смотреть видео-трансляцию. Поэтому он вынужден читать текстовую трансляцию, в которой все сообщения имеют вид "Машина номер X обогнала машину номер Y".Вася ненадолго отвлекся и перестал понимать текущий порядок машин на трассе. Помогите ему понять, в каком порядке расположены машины по известным сообщениям с начала текстовой трансляции. В первой строке заданы два натуральных числа N и M (1 ≤ N, M ≤ 100000) - количество машин и сообщений об обгоне соответственно. В следующих M строках содержатся описание сообщений об обгоне: пары чисел X и Y (1 ≤ X, Y ≤ N) - машина X обогнала машину Y. Гарантируется, что машина Y ехала непосредственно перед машиной X на момент сообщения. Выведите N чисел - порядок, в котором находятся машины после обработки всех сообщений.

Решение задачи: «Вывести порядок, в котором находятся машины после обработки всех сообщений»

textual
Листинг программы
  ReadLn(n,m);
  for i:=1 to n do a[i]:=i;
  for m:=1 to m do begin
    ReadLn(x,y);
    i:=1; while a[i]<>y do Inc(i);
    {if a[i+1]<>x then begin WriteLn('*** Ошибка данных'); Halt; end;}
    a[i]:=x; a[i+1]:=y;
  end;
  for i:=1 to n do Write(' ',a[i]); WriteLn;

Объяснение кода листинга программы

  1. n - значение переменной n считывается с помощью ReadLn
  2. m - значение переменной m считывается с помощью ReadLn
  3. Цикл for i:=1 to n do a[i]:=i; - заполняет массив a значениями от 1 до n
  4. Цикл for m:=1 to m do begin - начало цикла для обработки соответствующего количества сообщений
  5. Считывание значений x и y с помощью ReadLn
  6. i:=1; while a[i]<>y do Inc(i); - находит индекс i в массиве a, содержащий значение y
  7. a[i]:=x; a[i+1]:=y; - изменяет порядок элементов в массиве a, перемещая элемент с индексом i перед элемент с индексом i+1
  8. for i:=1 to n do Write(' ',a[i]); - выводит элементы массива a через пробел
  9. WriteLn; - переводит курсор на новую строку.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

7   голосов , оценка 4.143 из 5
Похожие ответы