我正在使用密码暴力强制工具作为学习练习,我希望它可以恢复。
所以,我想要的是能够说,这是一组可能的字符,如果我计算出这个设置的每个可能组合的笛卡尔集合长度为n,那么x点的设置是什么? / p>
但是,我想在不计算整个集合的情况下这样做。我在网上看到了类似的逻辑,但是我无法将其概括为适合。
任何帮助都会很棒,谢谢!如果有帮助的话,我会精通C#。
编辑:这是我之前提到的问题:How to select specific item from cartesian product without calculating every other item
编辑:这是我的意思的一个例子:
Char set = [abcd]
Length n = 4
Permutations:
[aaaa]
[aaab]
[aaac]
[aaad]
[aaba]
....
[dddd]
所以,如果我在4点搜索这个集合,我会得到[aaad]。但是,如果我正在搜索元素7000,那么到达那一点需要很长时间。
答案 0 :(得分:1)
这实现了您链接问题的答案:
static string Get(string chars, int n, int i)
{
string ret = "";
int sizes = 1;
for (int j = 0; j < n; j++) {
ret = chars[(i / sizes) % chars.Length] + ret;
sizes *= chars.Length;
}
return ret;
}
示例:
string chars = "abcd";
int n = 3;
for (int i = 0; i < Math.Pow(chars.Length, n); i++)
Console.WriteLine(i + "\t" + Get(chars, n, i));
0 aaa 1 aab 2 aac 3 aad ... 61 ddb 62 ddc 63 ddd