Как перебрать все комбинации символов по заданной длине пароля?

Приветствую всех, сегодня мы рассмотрим пример при котором на входе задается длина комбинации, а символы которые будут использоваться в комбинации вносятся в методе MakeSubsets. Давно еще лет 5 назад, когда мне требовалось написать программу для подбора пароля из комбинаций цифр я использовал условные операторы и счетчики. Мой код был ужасен, а длина его была очень большой. Сейчас я покажу как с помощью рекурсии и простого кода вывести все комбинации символов a, b, c, d заданной длины пароля.

public static void Main()
		{
			WriteAllWordsOfSize(1);
			WriteAllWordsOfSize(2);
			WriteAllWordsOfSize(3);
			WriteAllWordsOfSize(4);

			Console.ReadKey();
		}

		static void WriteAllWordsOfSize(int size)
		{
			MakeSubsets(new char[size]);
		}



		static void MakeSubsets(char[] subset, int position = 0)
		{
			if (position == subset.Length)
			{
				Console.WriteLine(new string(subset));
				return;
			}
			subset[position] = 'a';
			MakeSubsets(subset, position + 1);
			subset[position] = 'b';
			MakeSubsets(subset, position + 1);
			subset[position] = 'c';
			MakeSubsets(subset, position + 1);
			subset[position] = 'd';
			MakeSubsets(subset, position + 1);
		}

Расширить количество символов можно добавив строчку кода и по аналогии другие символы вы сможете добавить самостоятельно:

subset[position] = 'f';
MakeSubsets(subset, position + 1);

 

 

Обновлено: 07.01.2018 — 15:09

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.