Как эффективно извлечь перестановки строк фиксированной длины из списка символов? - PullRequest
0 голосов
/ 13 сентября 2018

Я пытаюсь создать функцию, которая заполняет массив из списка символов так, что массив будет состоять из уникальных строк длиной n. Каждая возможная перестановка должна быть включена. В приведенном ниже рабочем примере используется n = 2, однако я хочу иметь возможность изменять n во время выполнения.

static char ULC[62] =   {'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','0','1','2','3','4','5','6','7','8','9'};

static char pw[4096][2];    

for (int i = 0; i < 62; i++)
    {
    for (int j = 0; j < 62; j++)
        {
        pw[i * 62 + j][0] = ULC[i];
        pw[i * 62 + j][1] = ULC[j];
        }   
    }

Очевидно, что увеличение n потребует гораздо большего массива, но я просто использую статический массив в приведенном выше примере, чтобы упростить код и объяснение. В идеале то, что будет работать в визуальной студии C (не C ++ и определенно не Python, Java и т. Д.).

1 Ответ

0 голосов
/ 13 сентября 2018

Если переписать его так, сделать его полностью динамичным должно быть довольно просто:

const int num_chars = 62;
const int n = 3;
static char pwn[num_chars * num_chars * num_chars][n];

for (int i = 0; i < num_chars * num_chars * num_chars; ++i) {
    int val = i;
    for (int in = 0; in < n; ++in) {
        pwn[i][in] = ULC[val % num_chars];
        val /= num_chars;
    }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...