Вот простая непроверенная программа на C ++, которая создает слова путем подсчета в Base 26:
#include <string>
#include <iostream>
int main(void)
{
//----------------------------------------------------------
// Print permuations of strings of letters up to length 5.
// Use base 26 arithmetic.
//----------------------------------------------------------
const unsigned int MAX_ITERATIONS = 26 * 26 * 26 * 26 * 26;
std::string word = "A";
for (unsigned int i = 0; i < MAX_ITERATIONS; ++i)
{
//------------------------------------------------------
// Print the word
//------------------------------------------------------
std::cout << word << std::endl;
//------------------------------------------------------
// Increment the word, using base 26 arithmetic.
// A, B, C, ..., Z.
// AA, BA, CA, ..., ZA, AB, BB, CB, DB, ..., ZZ.
// AAA, BAA, CAA, ..., ZAA, ABA, BBA, CBA, DBA, ..., ZZZ.
//------------------------------------------------------
bool carry_generated = false;
unsigned int digit = 0;
do
{
carry_generated = false;
if (word[digit] < 'Z')
{
++word[digit];
break;
}
word[digit++] = 'A';
if (word.length() == digit)
{
word += "A";
break;
}
carry_generated = true;
} while (carry_generated && (digit < 5));
}
return 0;
}
Количество напечатанных слов можно уменьшить, проверив список слов (например, словарь) перед печатью. Если слово есть в списке слов, распечатайте его.
Самая большая проблема с длиной слова в 29 - это количество. Количество выходит за пределы стандартного целого числа C ++ без знака. Библиотека Big Int должна быть использована. Следующая проблема - это время, необходимое для обработки каждой комбинации. Умножьте количество на 1 микросекунду за итерацию (в худшем случае) и уменьшите до дней, часов, минут и секунд. Возможно, могут потребоваться годы.