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

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

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 19.11.2012, 14:28   #1
iNsomNia7
Новичок
Джуниор
 
Регистрация: 19.11.2012
Сообщений: 1
По умолчанию Пересечение множеств

Готовлюсь к олимпиаде, возникли некоторые проблемы с задачей:


Пересечение множеств
(Время: 1 сек. Память: 16 Мб Сложность: 34%)
Даны два неупорядоченных набора целых чисел (может быть, с повторениями). Выдать без повторений в порядке возрастания все те числа, которые встречаются в обоих наборах.

Входные данные

В первой строке входного файла INPUT.TXT записано через пробел два целых числа N и М (1 ≤ N, М ≤ 106) — количество элементов первого и второго наборов, соответственно. В следующих строках записано сначала N чисел первого набора, а затем M чисел второго набора. Числа разделены пробелами или символами конца строки. Каждое из этих чисел попадает в промежуток от 0 до 105.

Выходные данные

В выходной файл OUTPUT.TXT нужно записать в возрастающем порядке без повторений все числа, которые входят как в первый, так и во второй набор. Числа разделять одним пробелом. Если таких чисел нет, то выходной файл должен оставаться пустым.

Пример



Код:
program abc;
var q,w,c: array[1..100] of integer;
    i,j,a,b,z,x,k,l,r:integer;
begin
assign(input, 'input.txt');
reset(input);
assign(output, 'output.txt');
rewrite(output);
read(a, b);
for i:=1 to a do begin
                  read(z);
                  q[i]:=z;
                 end;
for i:=1 to b do begin
                  read(x);
                  w[i]:=x;
                 end;
for i:=1 to a do
 for j:=1 to b do begin
                   if q[i]=w[j] then begin
                                      k:=k+1;
                                      c[k]:=q[i];
                                      break;
                                     end;
                  end;
for i:=1 to k-1 do
 for j:=i+1 to k do
  if c[i]=c[j] then begin
                     for l:=j to k do
                      c[l]:=c[l+1];
                      k:=k-1;
                    end;
for i:=1 to k-1 do
 for j:=i+1 to k do
  if c[i]>c[j] then begin
                     r:=c[i];
                     c[i]:=c[j];
                     c[j]:=r;
                    end;
for i:=1 to k do write(c[i], ' ');
end.
iNsomNia7 вне форума Ответить с цитированием
Старый 19.11.2012, 14:38   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Даю подсказку:
Код:
var s3,s1,s2:set of 1..105; i:integer;
begin  Randomize;
 for i:=1 to 10 do include(s1,1+Random(10));
 for i:=1 to 5 do include(s2,1+Random(10));

 for i:=1 to 105 do if i in s1 then write(i:5);writeln;
 for i:=1 to 105 do if i in s2 then write(i:5);writeln;

 s3:=s1*s2;
 for i:=1 to 105 do if i in s3 then write(i:5);writeln;

 readln;
end.
Так обрабатываются множества.
Замени мой ввод через random на свой ввод из файла используй read для этого.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Пересечение множеств, паскаль Bellatryx Паскаль, Turbo Pascal, PascalABC.NET 2 16.04.2012 09:44
Пересечение множеств. С++ Демик Помощь студентам 4 13.03.2011 18:04
найти разность и пересечение множеств (синтаксис СИ) vad-92 Общие вопросы C/C++ 4 14.06.2010 13:50
Пролог!!!!!" Пересечение множеств giga1989 Помощь студентам 0 28.04.2010 21:27
пересечение двух множеств Олежек Фриланс 7 10.03.2010 18:46