Выведите два числа — номера мест, билеты на которые стоит купить девочкам - Pascal ABC

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

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

Саша и Лиза — две самые обычные девочки, которые живут в Москве и очень любят Санкт-Петербург. На каникулы они запланировали обширную экскурсионную программу в северной столице, осталось только купить билеты. Девочки знают, что быстрее всего добраться до Санкт-Петербурга можно на скоростном поезде «Сапсан». В каждом вагоне есть N рядов, в каждом из которых по 4 места, которые нумеруются так: 1 2 4 3 5 6 8 7 9 10 12 11 13 14 16 15 17 18 20 19 21 22 24 23 . . . . . . . . Саша и Лиза выбрали вагон, в котором они планируют ехать. Оказалось, что в этом вагоне уже продано M билетов и известно, какие места уже заняты. Девочки решили купить билеты таким образом: если есть два места рядом, то они покупают их (например, 1 и 2 или 3 и 4) если двух мест рядом нет, то они пытаются купить места рядом через проход (например, 2 и 4) если нет и таких мест, то они покупают любые два свободных места. Помогите Саше и Лизе определить, какие места им стоит купить. Гарантируется, что в выбранном вагоне есть как минимум два свободных места. Входные данные В первой строке входных данных содержатся числа N — количество рядов в вагоне (1 ≤ N ≤ 105) и M — количество проданных билетов (1 ≤ M ≤ 4N - 2). В следующей строке записаны M различных чисел — номера мест, на которые билеты уже проданы. Выходные данные Выведите два числа — номера мест, билеты на которые стоит купить девочкам. Если возможны несколько вариантов ответа, выведите любой из них. Примеры входные данные 2 3 3 7 8 выходные данные 5 6 входные данные 2 5 1 4 5 2 7 выходные данные 6 8 входные данные 2 5 2 7 4 5 6 выходные данные 1 3

Решение задачи: «Выведите два числа — номера мест, билеты на которые стоит купить девочкам»

textual
Листинг программы
var
  a:array[1..105,1..4] of boolean;
  n,c,i,j,k:integer;
  res1,res2,res3:string;
begin
  readln(n,c);
  for k:=1 to c do begin
    read(c);
    i:=c div 4+1;
    j:=c mod 4;
    if j=0 then begin j:=3;i:=i-1;end else if j=3 then j:=4;
    a[i,j]:=true;
  end;
  res1:='';res2:='';res3:='';
  for i:=1 to n do begin
     if not (a[i,1]) and not (a[i,2]) then begin res1:=inttostr((i-1)*4+1)+' '+inttostr((i-1)*4+2);break;end;
     if not (a[i,4]) and not (a[i,3]) then begin res1:=inttostr((i-1)*4+4)+' '+inttostr((i-1)*4+3);break;end; 
     if not (a[i,2]) and not (a[i,3]) then begin res2:=inttostr((i-1)*4+2)+' '+inttostr((i-1)*4+4);end;
     if length(res3)<250 then begin
       if not (a[i,1]) then res3:=res3+inttostr((i-1)*4+1)+' ';
       if not (a[i,2]) then res3:=res3+inttostr((i-1)*4+2)+' ';
       if not (a[i,3]) then res3:=res3+inttostr((i-1)*4+3)+' ';
       if not (a[i,4]) then res3:=res3+inttostr((i-1)*4+4)+' ';
     end;
  end;
  res3:=res3+' ';
  if res1<>'' then writeln(res1) else if res2<>'' then writeln(res2) else begin
    res1:=copy(res3,1,pos(' ',res3));
    delete(res3,1,pos(' ',res3));
    writeln(res1+copy(res3,1,pos(' ',res3)-1));
  end;  
end.

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

В данном коде используется язык программирования Pascal ABC. Задача заключается в выводе двух чисел - номеров мест, на которые стоит купить билеты девочкам. Переменные в коде:

  • a: массив размером 105x4, в котором каждая строка представляет собой билет на место (используется для хранения информации о билетах).
  • n и c: переменные, которые считываются с клавиатуры и используются для определения количества мест и номеров мест соответственно.
  • res1, res2, res3: строки, в которые записываются результаты.
  • i, j, k: переменные, которые используются для определения номеров мест. Код начинается с чтения переменных n и c с клавиатуры. Затем происходит цикл, в котором для каждого номера места (от 1 до n) проверяется, есть ли на этом месте свободное место (определяется по наличию билета). Если места нет, то переменной res1 присваивается результат, который выводится на экран. Аналогично проверяются остальные номера мест и присваиваются переменным res2 и res3. После завершения цикла, если на каком-либо месте все же было найдено свободное место, то его номер и номер соседнего места записываются в переменную res1. Если на каком-либо месте все места заняты, то в переменную res1 записывается номер этого места. В конце кода, если переменная res1 не пустая, то выводится на экран результат, который состоит из номера места и номера соседнего места, разделенных пробелом. Если переменная res2 или res3 не пустые, то выводится соответствующий результат. Если все места заняты, то в переменную res1 записывается номер места, а в переменную res3 - номер соседнего места.

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


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

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

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