Выведите два числа — номера мест, билеты на которые стоит купить девочкам - 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 - номер соседнего места.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д