Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.04.2015, 22:07   #11
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Код:
type TMyBytes = set of Byte;
var a: array of TMyBytes;
    i,n: Integer;
    b1,b2: Byte;
    b: TMyBytes;

...  
  n:=чего-то
  SetLength(a,n);
  for i:=0 to n-1 do begin
    b1:=начало отрезкаj
    b2:=конец отрезка;
    a[i]:=[b1..b2];
  end;
  b:=a[0];
  for i:=1 to n-1 do b:=b*a[i];
  if b=[] then нет общих точек else есть общие точки

end;
Если без массива, то прямо в цикле как BDA предлагал
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 26.04.2015 в 22:10.
Аватар вне форума Ответить с цитированием
Старый 26.04.2015, 22:08   #12
Вадим Мошев

Старожил
 
Аватар для Вадим Мошев
 
Регистрация: 12.11.2010
Сообщений: 8,568
По умолчанию

Цитата:
Сообщение от BDA Посмотреть сообщение
"Прикрутить" множества можно.
Взять два пустых множества. Найти минимальное и максимальное значение для начал и концов отрезков. Заполнить одно множество числами от минимального начала до максимального начала, а другое - от минимального конца до максимального конца. Затем найти пересечение множеств и проверить его на пустоту.

Второй подход:
Взять множество, содержащее все точки от 0 до 100. Преобразовывать каждый отрезок во множество точек, которое он покрывает, и находить пересечение с этим множеством (накапливать пересечения). В конце проверить полученное множество на пустоту.

ПС Это первое, что пришло в голову. Могут быть и более элегантные способы применения множеств.
Не особо вчитывался, но пришло в голову такое решение.
1. Нам надо найти самый широкий отрезок, который включает в себя все остальные.
2. Записываем координаты конца и начала отрезка в множество.
3. Проверяем условие принадлежности точки к этому отрезку (у нас одномерное пространство?)
Вадим Мошев вне форума Ответить с цитированием
Старый 26.04.2015, 22:10   #13
Neostat
Пользователь
 
Регистрация: 19.10.2014
Сообщений: 49
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Код:
type TMyBytes = set of Byte;
var a: array of TMyBytes;
    i,n: Integer;
    b1,b2: Byte;
    b: TMyBytes;

...  
  n:=чего-то
  SetLength(a,n);
  for i:=0 to n-1 do begin
    b1:=начало отрезкаj
    b2:=конец отрезка;
    a[i]:=[b1..b2];
  end;
  b:=a[0];
  for i:=1 to n-1 do b:=b*a[i];
  if b=[] then нет общих точек else есть общие точки

end;
И вам спасибо большое,разобрался я) Все легко,просто то ли плохо искал,то ли ещё что...Не разобрался как сделать мн-во отрезков.)Теперь все отлично)
Neostat вне форума Ответить с цитированием
Старый 26.04.2015, 22:16   #14
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

И я снова наврал.. Во множестве должны быть все число из [0; 100]
Poma][a вне форума Ответить с цитированием
Старый 26.04.2015, 22:47   #15
Neostat
Пользователь
 
Регистрация: 19.10.2014
Сообщений: 49
По умолчанию

Цитата:
Сообщение от Poma][a Посмотреть сообщение
А и не будем. Преп - умница! Прально он все говорит
Делаем так :
Код:
s := [];
for i := 1 to n do begin
     Read(a, b);
     for j := 1 to a-1 do
          s :=s-[j];
     for j := b+1 to 100 do
          s :=s-[j];
end;
for i := 1 to 100 do
   if i in s then begin
       WriteLn(i); Break
   end
Немного непонятно,а почему a-1 и b + 1
Neostat вне форума Ответить с цитированием
Старый 26.04.2015, 22:59   #16
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,429
По умолчанию

Потому что концы отрезков покрыты, а эти циклы удаляют непокрытые отрезком точки из множества.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA на форуме Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
задача в Delphi Elena21 Помощь студентам 0 15.10.2013 23:54
Задача на Delphi UnoMain Помощь студентам 1 24.04.2011 16:20
Задача в Delphi Oksana11 Помощь студентам 3 22.12.2007 00:12