Как реализовать двухуровневое перечисление с перестановкой и n-choose-k?C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Гость
 Как реализовать двухуровневое перечисление с перестановкой и n-choose-k?

Сообщение Гость »


Я пытаюсь написать программу, выполняющую перечисления квадратных матриц. Элементами матриц могут быть любые из трех символов: «.», «X» и «E». Перечисление параметризуется двумя значениями:
[*]W (что означает «размер слова») — количество строк в матрицах. Это также количество столбцов, поскольку матрицы квадратные. [*]E (что означает «дополнительные ненулевые записи») — это число от 0 до W2-W.
Теперь, учитывая W и E, цель состоит в том, чтобы перечислить все матрицы следующего вида:
[*]Существует ровно W элементов с буквами X. [*]В каждой строке и каждом столбце должен быть знак «X». [*]Есть ровно E-элементы, в которых есть E, и они не могут находиться там, где есть X. [*]Остальные элементы W2-W-E содержат '.'.
Программа принимает три аргумента командной строки: W, E и либо «x», либо «h». Программа перечислит все матрицы для W и E в любом порядке и распечатает их в одном из следующих двух форматов:
[*]Если последний аргумент равен «x», вы распечатаете матрицы в приведенном выше формате. Каждую матрицу следует распечатать в виде W строк из W символов: «.», «X» или «E». После каждой матрицы вы печатаете пустую строку. [*]Если последним аргументом является «h», то вы преобразуете каждую строку каждой матрицы в целое число и печатаете это целое число в шестнадцатеричном виде, без ведущих 0 и без ведущих «0x». Если элемент i в строке равен «X» или «E», то вы установите i-й бит числа равным 1. В противном случае i-й бит равен нулю. Вы будете печатать каждое целое число в отдельной строке и пустую строку в конце каждой матрицы.
Метод, который я использую, представляет собой двухуровневое перечисление: сначала перестановка матриц «X» с помощью рекурсивной функции, а затем выполнение «n select k» с другой рекурсивной функцией.

Вот что у меня сейчас есть:

#include #include #include #include использование пространства имен std; класс Матрица { публика: интервал W; интервал Е; чар П; вектор Пермь; вектор Non_X; вектор E_ID; недействительная печать () { если (P == 'x') { for (int i = 0; i < W; ++i) { строка row(W, '.'); row[Perm] = 'X'; for (int id: E_ID) { int r = id/W; int c = идентификатор% W; если (я == г) { строка[c] = 'Е'; } } cout
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Двухуровневое приложение доступа с Firebase на Android в Java, одно для пользователя, одно для администратора.
    Гость » » в форуме Android
    0 Ответы
    132 Просмотры
    Последнее сообщение Гость
  • C++, Code::Blocks, which project type should I choose for GUI in both windows and macos?
    Anonymous » » в форуме C++
    0 Ответы
    161 Просмотры
    Последнее сообщение Anonymous
  • Почему перечисление всегда находится в том состоянии, в котором перечисление указано первым?
    Anonymous » » в форуме C#
    0 Ответы
    84 Просмотры
    Последнее сообщение Anonymous
  • Перечисление Java и перечисление PostgreSQL
    Anonymous » » в форуме JAVA
    0 Ответы
    38 Просмотры
    Последнее сообщение Anonymous
  • Перечисление Java и перечисление PostgreSQL
    Anonymous » » в форуме JAVA
    0 Ответы
    32 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C++»