![]() |
Формирование подмножеств на с++
Добрый день!
Перед сдачей экзамена возникла такая задача: Дан массив произвольных элементов(Пусть для определенности массив типа int) Нужно выделить из массива все подмассивы(исключая нулевой) всех размеров. Предполагается использование union, в котором будет записано целове число и массив. Каким-то образом изменяя целое число, будем изменять в нем биты так, чтобы получились все подмножества. Получившиеся подмассивы вывести на экран. Заранее спасибо, очень надеюсь на Вашу помощь. |
Цитата:
Предлагаю усовершенствовать так: пусть есть начальный массив A. Задать массив из булевских переменных B такого же размера как A, который отражает наши биты. 1) реализовать операцию ++B (увеличение на единицу числа, представленного "битами" B) 2) реализовать операцию unsigned sparse_array(A,B,C), которая заполняет массив C так: если бит B[i] установлен, значит надо в C добавить A[i]. 3) вывести C на экран 4) скакать циклом в шаг 1 пока все биты B не установятся в true. Можно упаковать биты B в байты (по 8 штук), |
Идею понял, спасибо.
Но мне не совсем понятно, как реализовать union. Точнее понятен принцип, но нет полного понимания :) Когда мы увеличиваем цисло B на еденицу, в двоичном предствалении тоже добавится только еденица? Мне без разницы, какое будет число B? Вначале я должен задать не его, а заполнить массив нулями? Цикл выполнять до тех пор, пока количество true-битов не станет равным размеру массива A? Заранее спасибо! |
Цитата:
Цитата:
Цитата:
Цитата:
|
Время: 16:49. |
Время: 16:49.
© OSzone.net 2001-