![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() |
klem4 |
![]()
Сообщение
#1
|
![]() Perl. Just code it! ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 4 100 Пол: Мужской Реальное имя: Андрей Репутация: ![]() ![]() ![]() |
Давно : 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.
-------------------- perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
|
![]() ![]() |
volvo |
![]()
Сообщение
#2
|
Гость ![]() |
|
klem4 |
![]()
Сообщение
#3
|
![]() Perl. Just code it! ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 4 100 Пол: Мужской Реальное имя: Андрей Репутация: ![]() ![]() ![]() |
Спасибо, посмотрю :smile:
-------------------- perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
|
dummy |
![]()
Сообщение
#4
|
Гость ![]() |
Можно просто найти максимум всех чисел, являющихся координатами левых концов отрезков, минимум всех чисел, являющихся координатами правых концов, а потом сравнить получившиеся числа. Если максимум левых окажется больше минимума правых, то общих точек у них нет!
![]() |
volvo |
![]()
Сообщение
#5
|
Гость ![]() |
dummy, что же ты это не сделал, когда от тебя это требовалось, ведь это "так просто" !!!
![]() А тот алгоритм, на который я привел ссылку, кстати, в случае ненахождения общих точек будет работать гораздо быстрее тупого перебора, т.к. чтобы найти максимум/минимум в массиве, ты должен перебрать ВСЕ его элементы, а если второй отрезок даст отрицательный результат, то остальные 48 ты будешь перебирать просто так. |
![]() ![]() |
![]() |
Текстовая версия | 29.07.2025 7:53 |