Перебор возможных комбинаций символов - C (СИ)
Формулировка задачи:
Чет мой чайник совсем не варит! Помогите сделать следущее:
Вывести все возможные комбинации слов. Есть:
Логика мне ясна, а вот с реализацией туго!
Число возможных вариантов: 3*3*3 = 27
Я думаю начать с конца слова, с постепенным смещением влево. Но вот запутался в циклах...
Допустим меняю последний символ:
aaa aab aac
Затем смещаюсь влево:
aba
Опять последний:
aba abb abc
И у меня ступор... Исходник пустил под скальпель, пытаясь что-то сделать, так что не просите показать
А где есть исходники подобных алгоритмов?
char ch_table[] = "abc"; //таблица символов char word[] = "aaa"; //само слово - начальный вариант
->->->->-> aaa aab aac aba abb abc aca acb acc baa bab bac bba bbb bbc bca bcb bcc caa cab cac cba cbb cbc cca ccb ccc
Решение задачи: «Перебор возможных комбинаций символов»
textual
Листинг программы
#include <iostream>
#include <algorithm>
using namespace std;
//==========================================
int main ()
{
char arr[] = "abc";
const int N = strlen(arr);
cout << " arr[" << N << "] \n\n ";
sort(arr, arr + N); //reverse (arr, arr + N);
cout << arr << "\n\n ";
while( next_permutation(arr, arr + N) )//prev_permutation
{
for(int i = 0; i < N; i++)
{
cout << arr[i];
}
cout << endl << " ";
}
system("pause");
return EXIT_SUCCESS;
}
//==========================================
Объяснение кода листинга программы
В этом коде перебираются все возможные комбинации символов в строке abc.
- Создается строка
abcи сохраняется в массиве arr типа char. - Вычисляется длина строки с помощью функции strlen и сохраняется в переменной N.
- С помощью функции cout выводится длина строки.
- С помощью функции sort сортируется строка в обратном порядке.
- С помощью функции cout выводится отсортированная строка.
- С помощью цикла while запускается процесс перебора всех возможных комбинаций символов.
- В каждой итерации цикла с помощью функции cout выводится текущая комбинация символов.
- После каждой итерации цикла вызывается функция next_permutation, которая генерирует следующую комбинацию символов.
- После завершения цикла система вызывается функция pause, чтобы программа не закрылась раньше времени.
- Возвращается значение EXIT_SUCCESS.