===== PascalABC.NET =====
function Dec2Bin(m, n: integer): string;
// перевод целого n в строку длины m,
// содержащую битовое представление n
begin
Result := '0' * m; // строка из m нулей
var i := m; // идем по строке справа налево
while n > 0 do
if n.IsOdd then
Result[i] := '1'; // единичный бит для нечетной цифры
n := n shr 1; // сдвиг на 1 разряд вправо- аналог деления на 2
i += -1; // к следующему символу строки
end
end;
procedure SubSets<integer>(P: HashSet<integer>);
var n := P.Count; // мощность множества
var L := P.ToList; // список из элементов множества
var Q := new HashSet<HashSet<integer>>; // результирующее множество
var ht := new HashSet<integer>; // новое рабочее множество
Q.Add(ht); // добавили пустое множество
ht := nil;
Q.Add(P); // добавили исходное множество
var m := Trunc(2 ** n) - 2; // число оставшихся подмножеств
for var i := 1 to m do // перебор сочетаний
var s := Dec2Bin(n, i); // битовая шкала для сочетания
ht := new HashSet<integer>; // создали рабочее множество
for var j := 1 to n do // построение подмножества
if s[j] = '1' then
ht.Add(L[j-1]);
Q.Add(ht); // добавили подмножество
ht := nil // уничтожили рабочее подмножество
Q.Print(', ')
var n := ReadInteger('Мощность множества:');
var P := ReadSeqInteger('Введите элементы множества:', n).ToHashSet;
SubSets(P)
end.
Copyright © 2024 SCHOLAR.TIPS - All rights reserved.
Answers & Comments
===== PascalABC.NET =====
function Dec2Bin(m, n: integer): string;
// перевод целого n в строку длины m,
// содержащую битовое представление n
begin
Result := '0' * m; // строка из m нулей
var i := m; // идем по строке справа налево
while n > 0 do
begin
if n.IsOdd then
Result[i] := '1'; // единичный бит для нечетной цифры
n := n shr 1; // сдвиг на 1 разряд вправо- аналог деления на 2
i += -1; // к следующему символу строки
end
end;
procedure SubSets<integer>(P: HashSet<integer>);
begin
var n := P.Count; // мощность множества
var L := P.ToList; // список из элементов множества
var Q := new HashSet<HashSet<integer>>; // результирующее множество
var ht := new HashSet<integer>; // новое рабочее множество
Q.Add(ht); // добавили пустое множество
ht := nil;
Q.Add(P); // добавили исходное множество
var m := Trunc(2 ** n) - 2; // число оставшихся подмножеств
for var i := 1 to m do // перебор сочетаний
begin
var s := Dec2Bin(n, i); // битовая шкала для сочетания
ht := new HashSet<integer>; // создали рабочее множество
for var j := 1 to n do // построение подмножества
if s[j] = '1' then
ht.Add(L[j-1]);
Q.Add(ht); // добавили подмножество
ht := nil // уничтожили рабочее подмножество
end;
Q.Print(', ')
end;
begin
var n := ReadInteger('Мощность множества:');
var P := ReadSeqInteger('Введите элементы множества:', n).ToHashSet;
SubSets(P)
end.
l = input ().split()
for i in range(len(l)+1):
print([j for j in combinations(l,i)])