Получить все возможные словосочетания - PullRequest
2 голосов
/ 27 ноября 2010

У меня есть список из n слов (скажем, 26). Теперь я хочу получить список всех возможных комбинаций, но не более k слов в строке (скажем, 5)

Так что, когда мой список слов: ааа, BBB, ..., ZZZ Я хочу получить:

aaa
bbb
...
aaabbb
aaaccc
...
aaabbbcccdddeeefff
aaabbbcccdddeeeggg
...

Я хочу сделать его переменным, чтобы он работал с любым значением n или k. Не должно быть двух слов, и каждая комбинация должна быть взята (даже если их очень много).

Как мне этого достичь?

EDIT:

Спасибо за ваши ответы. Это не задание. Просто я забыл комбинации своего пароля и хочу быть уверенным, что все комбинации проверены. Хотя у меня нет 26 частей пароля, но это облегчило объяснение того, что я хочу.

Если есть другие люди с такой же проблемой, эта ссылка может быть полезной:
Создать массив словосочетаний в c #

Ответы [ 2 ]

3 голосов
/ 31 мая 2011

я написал простую функцию, чтобы сделать это

        private string allState(int index,string[] inStr)
        {
            string a = inStr[index].ToString();
            int l = index+1;
            int k = l;
            var result = string.Empty;
            var t = inStr.Length;
            int i = index;
            while (i < t)
            {
                string s = a;
                for (int j = l; j < k; j++)
                {
                    s += inStr[j].ToString();
                }
                result += s+",";
                k++;
                i++;
            }

            index++;
            if(index<inStr.Length)
                result += allState(index, inStr);
            return result.TrimEnd(new char[] { ',' });
        }

allState(0, new string[] { "a", "b", "c"})
2 голосов
/ 27 ноября 2010

Вы можете взглянуть на this

Однако, если вам нужно получить большое количество комбинаций (в десятки миллионов), вы должны использовать ленивую оценку для генерациикомбинации.

...