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

  1. Саша и Лиза — две самые обычные девочки, которые живут в Москве и очень любят Санкт-Петербург. На каникулы они запланировали обширную экскурсионную программу в северной столице, осталось только купить билеты. Девочки знают, что быстрее всего добраться до Санкт-Петербурга можно на скоростном поезде «Сапсан». В каждом вагоне есть 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

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

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.

СДЕЛАЙТЕ РЕПОСТ

5   голосов, оценка 4.200 из 5



Похожие ответы
  1. Составить программу обработки строковой информации с выводом на экран исходного и результирующего текстов. Исходный текст выбирается самостоятельно.Вычеркните из строки X те символы, которые используются в строке X дважды.

  1. на натуральном отрезке [a,b] найдите и выведите число N с наибольшей суммой своих делителей Через Repeat или While

  1. Дан текст, в которой слова разделены пробелами, а в конце стоит точка. Если количество слов в тексте нечётное - вывести среднее слово; если чётное - вывести 2 средних слова.

  1. Задачка с виду не сложная, а загнала в тупик Дан одномерный целочисленный массив A(N). Известно, что среди его элементов два и только два равны между собой. Напечатать их индексы.

  1. Всем доброго времени суток! Программку набросал, вреде работает, но не до конца. почему-то находит два одинаковых max на одних и тех же местах, а надо чтобы даже если числа msx в массиве одинаковые, то выводился бы разный индекс этих чисел. Вот код программы:

  1. Даны пять различных целых чисел. Найти среди них два числа, модуль разности которых имеет: Наибольшее значение

  1. Заполните массив случайными числами в интервале (0,1000) и выведите номера трёх различных минимальных элементов.Разрешается сделать только один проход по массиву

  1. Найти два самых больших элемента в массиве Указать их значения и индексы Если можно с объяснением Заранее спасибо

  1. Багаж пассажира характеризуется количеством вещей и общим весом вещей. Дан файл f, содержащий сведения о багаже нескольких пассажиров. Сведения о багаже каждого пассажира представляют собой запись с двумя полями: одно поле целого типа (количество вещей) и одно - действительное (вес в килограммах). Верно ли, что имеются два пассажира, багажи которых совпадают по числу вещей и различаются по весу не более чем на 0,5 кг.

  1. Выведите на экран все четырехразрядные числа, в записи которых нет одинаковых цифр. в с++ есть но надо в паскале