Определить множество, содержащее наибольшее количество элементов, которые есть в других множествах - PascalABC.NET
Формулировка задачи:
Дано N множеств . Определить множество, какое содержит наибольшее количество элементов , которые есть в других множествах .
Начать, начал, а закончить не хватает сил, буду благодарен за помощь, приложил начало кода.
Листинг программы
- program lab3;
- type mnj=set of byte;
- var
- x:byte;
- i,n:integer;
- a:mnj;
- b:array[1..100]of mnj;
- Begin
- Write('n ');read(n);{Задаем количество множеств}
- for i:=1 to n do begin{Заполняем множества до нажатия 1}
- write('x',i,' ');
- b[i]:=[];
- repeat
- repeat
- readln(x);
- until x in [0..255];
- b[i]:=b[i]+[x];
- until x=1;
- end;
- for i:=1 to n do{Выводим все множества}
- writeln('Множество ',i,' ',b[i]);
- a:=b[1];
- end.
Решение задачи: «Определить множество, содержащее наибольшее количество элементов, которые есть в других множествах»
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
- Вывод наибольшего количества элементов, которые есть в других множествах, и номера соответствующего множества
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д