1. Заголовок темы должен быть информативным. В противном случае тема удаляется ... 2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения. 3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали! 4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора). 5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM! 6. Одна тема - один вопрос (задача) 7.Проверяйте программы перед тем, как разместить их на форуме!!! 8.Спрашивайте и отвечайте четко и по существу!!!
Давно : 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;
beginfor i := 1to size dobegin
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) dobegin
include := false;
j := x[i];
while (j<=x[i+1]) andnot(include) dobegin
k := x[i+2];
while (k<=x[i+3]) andnot(include) doif 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) thenbegin
writeln('N doljno bit" chetnim !');
delay(2000);
clrscr;
end;
untilnot(odd(n));
FillArray(A, n);
writeln(IsIncluds(A, n));
readln;
end.
--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
Можно просто найти максимум всех чисел, являющихся координатами левых концов отрезков, минимум всех чисел, являющихся координатами правых концов, а потом сравнить получившиеся числа. Если максимум левых окажется больше минимума правых, то общих точек у них нет!
dummy, что же ты это не сделал, когда от тебя это требовалось, ведь это "так просто" !!!
А тот алгоритм, на который я привел ссылку, кстати, в случае ненахождения общих точек будет работать гораздо быстрее тупого перебора, т.к. чтобы найти максимум/минимум в массиве, ты должен перебрать ВСЕ его элементы, а если второй отрезок даст отрицательный результат, то остальные 48 ты будешь перебирать просто так.