===== 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.
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main()
{
vector <int> arr1;
vector <int> arr2;
int n;
cin >> n;
for(int i = 0 ; i < n ; ++i)
{
int temp; cin >> temp;
arr1.push_back(temp);
}
cin >> n;
for(int i = 0 ; i < n ; ++i)
{
int temp; cin >> temp;
arr2.push_back(temp);
}
for(int i = 0 ; i < arr1.size() ; i++)
if(find(arr2.begin(), arr2.end(), arr1[i]) == arr2.end())
cout << arr1[i] << ' ';
}