#c_sharp #алгоритм #комбинаторика
Нужно создать двумерный битовый (булевый) массив всех возможных комбинаций из 0 и 1 (false и true), размерность массива - параметр. Например, для входящего значения 3 результат должен быть 0 0 0, 0 0 1, 0 1 1, 1 0 0, 1 0 1, 1 1 1 Что-то завис.
Ответы
Ответ 1
Если 010 и 110 пропущены случайно, то результат - это двоичные представления всех чисел от 0 до 2n-1: int size = 3; bool[][] result = Enumerable.Range(0, 1 << size) .Select(i => new BitArray(new int[] { i }).Cast().Take(size).ToArray()) .ToArray(); Ответ 2
Если интересуют именно все возможные комбинации, и нет острой необходимости иметь результат в виде массива, то можно создать класс, реализующий индексное свойство: public sealed class BitArray2D { private readonly int highestBitIndex; public BitArray2D(int bitsCount) { highestBitIndex = bitsCount - 1; } public bool this[int rowIndex, int colIndex] { get { return (rowIndex & (1 << (highestBitIndex - colIndex))) != 0; } } } Этот класс позволит не выделять лишнюю память, а будет просто быстро вычислять значения при обращении. Пример: var t = new BitArray2D(3); Console.WriteLine(t[3, 0]); // False Console.WriteLine(t[3, 1]); // True Console.WriteLine(t[3, 2]); // TrueОтвет 3
Для языка PHP: $arr = range(0, 1<<$k-1);
Комментариев нет:
Отправить комментарий