Перебор возможных комбинаций символов - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Чет мой чайник совсем не варит! Помогите сделать следущее: Вывести все возможные комбинации слов. Есть:
char ch_table[] = "abc"; //таблица символов
char word[] = "aaa"; //само слово - начальный вариант
Логика мне ясна, а вот с реализацией туго! Число возможных вариантов: 3*3*3 = 27
->->->->->
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
Я думаю начать с конца слова, с постепенным смещением влево. Но вот запутался в циклах... Допустим меняю последний символ: aaa aab aac Затем смещаюсь влево: aba Опять последний: aba abb abc И у меня ступор... Исходник пустил под скальпель, пытаясь что-то сделать, так что не просите показать А где есть исходники подобных алгоритмов?

Решение задачи: «Перебор возможных комбинаций символов»

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.

  1. Создается строка abc и сохраняется в массиве arr типа char.
  2. Вычисляется длина строки с помощью функции strlen и сохраняется в переменной N.
  3. С помощью функции cout выводится длина строки.
  4. С помощью функции sort сортируется строка в обратном порядке.
  5. С помощью функции cout выводится отсортированная строка.
  6. С помощью цикла while запускается процесс перебора всех возможных комбинаций символов.
  7. В каждой итерации цикла с помощью функции cout выводится текущая комбинация символов.
  8. После каждой итерации цикла вызывается функция next_permutation, которая генерирует следующую комбинацию символов.
  9. После завершения цикла система вызывается функция pause, чтобы программа не закрылась раньше времени.
  10. Возвращается значение EXIT_SUCCESS.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

6   голосов , оценка 3.5 из 5
Похожие ответы