Вывести в файл все подмножества множества - C (СИ)
Формулировка задачи:
Вывести в файл все подмножества множества {1,...,N}
Каким образом это можно сделать ?
Решение задачи: «Вывести в файл все подмножества множества»
textual
Листинг программы
for(mask=0,maxmask=1<<n; mask!=maxmask; ++mask)
{
for(q=0; q<n; ++q)
if(mask&(1<<q))
printf("%d ", q+1)
putchar('\n');
}
Объяснение кода листинга программы
В данном коде выполняется генерация всех подмножеств множества. Список действий выглядит следующим образом:
- Инициализация переменной
maskзначением 0. - Инициализация переменной
maxmaskзначением1<<n, гдеn- количество элементов в множестве. - Перебирание всех возможных значений
maskот 0 доmaxmaskвключительно. - Для каждого значения
maskперебирание всех элементов множества. - Если элемент
qпринадлежит подмножеству (это можно проверить, сравнивmaskс1<<q), то добавлениеqв вывод. - После завершения перебора всех элементов подмножества, переход к следующему значению
mask. - После завершения перебора всех значений
mask, переход к следующему множеству. Код выводит все подмножества множества на отдельной строке, разделяя элементы подмножества пробелами.