Определить множество, содержащее наибольшее количество элементов, которые есть в других множествах - PascalABC.NET
Формулировка задачи:
Дано N множеств . Определить множество, какое содержит наибольшее количество элементов , которые есть в других множествах .
Начать, начал, а закончить не хватает сил, буду благодарен за помощь, приложил начало кода.
Решение задачи: «Определить множество, содержащее наибольшее количество элементов, которые есть в других множествах»
textual
Листинг программы
type mnj=set of byte;
var b:array[1..20]of mnj;
n,m,i,j,k,p,x,mx,imx:byte;
begin
randomize;
repeat
write('Количество множеств от 3 до 20 n=');
readln(n);
until n in [3..20];
repeat
write('Маскимальная мощность множеств от 3 до 20 m=');
readln(m);
until m in [3..20];
writeln('Множества');
for i:=1 to n do
begin
b[i]:=[];
for j:=1 to m do
begin
x:=random(100);
b[i]:=b[i]+[x];
end;
write(i:2,')');
for k:=1 to 100 do
if k in b[i] then write(k:3);
writeln;
end;
mx:=0;
imx:=0;
for i:=1 to n do //перебираем все множества
begin
k:=0;//есть в других 0
for j:=1 to 100 do
if j in b[i] then //если число есть в данном множестве
begin
x:=1;
p:=0;
while(x<=n)and(p=0)do //ищем его в других
if(x<>i)and(j in b[x]) then inc(p)//если есть
else inc(x);
if p=1 then inc(k);//считаем
end;
if k>mx then //если больше текушего максимума
begin
mx:=k; //это максимум
imx:=i; //его номер
end;
end;
writeln('Наибольшее количество элементов , которые есть в других множествах');
writeln('содержит множество номер ',imx,' их количество=',mx)
end.
Объяснение кода листинга программы
- Объявление переменных:
- mnj - тип данных, представляющий множество байтовых значений (set of byte)
- b - массив из 20 элементов типа mnj
- n, m, i, j, k, p, x, mx, imx - все типа byte
- Инициализация генератора случайных чисел
- Ввод количества множеств (n) и максимальной мощности множеств (m) с помощью функции readln
- Вывод списка множеств:
- Создание пустых множеств b[i] для каждого из n множеств
- Заполнение множеств случайными числами от 1 до 100
- Вывод номера множества и его элементов
- Поиск наибольшего количества элементов, которые есть в других множествах:
- Инициализация переменных mx = 0 и imx = 0
- Перебор всех множеств
- Для каждого множества:
- Инициализация переменной k = 0, которая подсчитывает количество элементов в других множествах
- Перебор всех чисел от 1 до 100
- Если число есть в текущем множестве, то:
- Увеличение переменной x на 1 и переключение в следующий цикл
- Если переменная x меньше n и p = 0, то:
- Если число j не равно i и j есть в b[x], то увеличение переменной p на 1
- Увеличение переменной x на 1
- Если p = 1, то увеличение переменной k на 1
- Если k больше mx, то:
- Установка mx = k
- Установка imx = i
- Вывод наибольшего количества элементов, которые есть в других множествах, и номера соответствующего множества