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