Помощь - Поиск - Пользователи - Календарь
Полная версия: Задача на массив.
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
klem4
Давно : n<=50, x[1..n] - n/2 отрезков на числовой оси (x1..x2, x3..x4, ..., xn-1.. xn), определить, имеют ли они все общие точки ... вот решил, но может кто покороче(читай побыстрее) предложит ? :confused:

program _611A;
uses crt;
type
   TArr = array[1..50] of integer;
var
   A : TArr;
   n : byte;

procedure FillArray(var x : TArr; size : byte);
var
   i : byte;
begin
   for i := 1 to size do begin
      write('x[',i,']=');
      readln(x[i]);
   end;

   writeln;

end;

function IsIncluds(x : TArr; size : byte) : boolean;
var
   i,j,k : integer;
   include : boolean;
begin

   include := true;

   i := 1;

   while (i<=n-3)and(include) do begin

      include := false;

      j := x[i];

      while (j<=x[i+1]) and not(include) do begin

         k := x[i+2];
         while (k<=x[i+3]) and not(include) do
          if j=k then inc(include)
           else inc(k);

         inc(j);

      end;
      inc(i,2);
   end;

   IsIncluds := include;

end;

begin

   clrscr;

   repeat

      write('n='); readln(n);

      if odd(n) then begin
         writeln('N doljno bit" chetnim !');
         delay(2000);
         clrscr;
      end;

   until not(odd(n));

   FillArray(A, n);

   writeln(IsIncluds(A, n));

   readln;
end.
volvo
To: klem4
Поиск для кого? wink.gif
Концы отрезков Если это не оно самое, то ОЧЕНЬ похожее...
klem4
Спасибо, посмотрю :smile:
dummy
Можно просто найти максимум всех чисел, являющихся координатами левых концов отрезков, минимум всех чисел, являющихся координатами правых концов, а потом сравнить получившиеся числа. Если максимум левых окажется больше минимума правых, то общих точек у них нет! wink.gif
volvo
dummy, что же ты это не сделал, когда от тебя это требовалось, ведь это "так просто" !!! dry.gif

А тот алгоритм, на который я привел ссылку, кстати, в случае ненахождения общих точек будет работать гораздо быстрее тупого перебора, т.к. чтобы найти максимум/минимум в массиве, ты должен перебрать ВСЕ его элементы, а если второй отрезок даст отрицательный результат, то остальные 48 ты будешь перебирать просто так.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.