Как перебрать все перестановки на C++? Реальная задача посложнее, но мне нужно понять лишь сам принцип, поэтому она очень упрощена. Всего есть три типа букв: A, B и C. На вход программы подаются три числа - количество букв A, количество букв B и соответственно C. Как можно перебрать все перестановки (перестановки с математической точки зрения)? Не важно, что с ними делать, выводить, складывать или находить наибольшее, важно, чтобы просто была возможность получить каждую перестановку, а не какие-либо другие комбинации. Сами буквы должны являться элементами массива. Например, на вход подаются числа "1 1 1", поэтому соответствующие комбинации будут: ABC, ACB, BAC, BCA, CAB, CBA. Это простые входные данные, но на практике может быть, например, и такая комбинация чисел - "6 2 3". Не обязательно на C++, но было бы неплохо

21 Авг 2019 в 06:05
163 +1
0
Ответы
1

Для перебора всех перестановок в данном случае можно воспользоваться рекурсивной функцией. Вот пример кода на C++:

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
void generate_permutations(vector<char>& letters, vector<char>& permutation, int index, int a, int b, int c) {
if(permutation.size() == a + b + c) {
for(char letter : permutation) {
cout << letter;
}
cout << endl;
} else {
if(a > 0) {
permutation[index] = 'A';
generate_permutations(letters, permutation, index + 1, a - 1, b, c);
}
if(b > 0) {
permutation[index] = 'B';
generate_permutations(letters, permutation, index + 1, a, b - 1, c);
}
if(c > 0) {
permutation[index] = 'C';
generate_permutations(letters, permutation, index + 1, a, b, c - 1);
}
}
}
int main() {
int a, b, c;
cin >> a >> b >> c;
vector<char> letters = {'A', 'B', 'C'};
vector<char> permutation(a + b + c);
generate_permutations(letters, permutation, 0, a, b, c);
return 0;
}

Этот код позволяет сгенерировать все перестановки букв A, B и C с учетом количества каждой из них, введенного пользователем.

20 Апр в 13:24
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 92 493 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир