Как сгенерировать все слова из букв, заданной длины?

Помогите нужно сгенерировать слова из заданного алфавита
например:
алфавит: а,б,в,г
длина слова: 4
тогда количество слов: 4^2
аа
аб
ав
аг
ба
бб
бв
бг
ва
вб
вв
....
гг
  • Вопрос задан
  • 3430 просмотров
Решения вопроса 1
@ar4ebaldello
Это не самый оптимальный, но, наверное, самый простой вариант.
Если хочешь, то могу подробно расписать.
class Program
{
	static void Main(string[] args)
    {
        Console.InputEncoding = Console.OutputEncoding = Encoding.GetEncoding(@"Cyrillic");

        var letters = Console.ReadLine().ToCharArray(); // Введи весь алфавит в одну строчку
        var wordLength = int.Parse(Console.ReadLine()); // Введи размер слова

        var word = new char[wordLength];
        var totalWordsCount = 1;

        for (var i = 0; i < wordLength; i++)
            totalWordsCount *= letters.Length;

        for (var i = 0; i < totalWordsCount; i++)
        {
            var accum = i;
            for (var j = word.Length - 1; j >= 0; j--)
            {
                word[j] = letters[accum % letters.Length];
                accum /= letters.Length;
            }

            Console.WriteLine(new string(word));
        }

        Console.ReadKey();
    }
}
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
на будущее:

- вам нужны все возможные перестановки букв, а не все слова
- перестановки по английски будут "permutations"
- гугл

https://en.wikipedia.org/wiki/Heap%27s_algorithm
Ответ написан
Комментировать
Mrrl
@Mrrl
Заводчик кардиганов
void PrintAllWords(string alphabet,int length){
  PrintAllWords(alphabet,length,"");
}
void PrintAllWords(string alphabet,int length,string prefix){
  if(length==0) Console.WriteLine(prefix);
  else foreach(char c in alphabet) PrintAllWords(alphabet,length-1,prefix+c);
}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы