算法:里程表/蛮力 [英] Algorithm: Odometer / Brute force
本文介绍了算法:里程表/蛮力的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我想写一个C#风格,语言里程表样的方法,而不是只用0-9个字符,但任何字符集。它会像蛮力应用,或多或少。
如果我通过在一个char数组的字符从 0 为Ĵ,并设置长度为5,我想喜欢的 00000,00001,00002结果... HJJJJ,IJJJJJ,JJJJJ 的。
下面是基础,请帮我扩大:
保护无效的主要()
{
炭[]字符=新的char [] {'0','1','2','3','4','5','6','7','8','9',
A,B,C,D,E,F,G,H,I,J};
暴力破解(字符,5);
}
私人无效暴力破解(的char []字符,INT的长度)
{
// for循环(?)控制台编写所有可能的组合,从00000到JJJJJ
//(当在长度传递是5)
// TODO:实现code ...
}
解决方案
这是我找到的解决方案之一。我喜欢它的紧凑性和分离:
私有静态的char []字符=
新的char [] {'0','1','2','3','4','5','6','7','8','9','A',' B','C','D','E','F','G','H','I','J'};
//长度:字符串通过暴力破解创造的长度
公共静态无效PerformBruteForce(INT长度){
INT charactersLength = characters.Length;
INT []里程表=新INT [长度];
长尺寸=(长)Math.Pow(charactersLength,长度);
的for(int i = 0; I<大小;我++){
WriteBruteForce(里程表,字符);
INT位置= 0;
做 {
里程表[位置] + = 1;
里程表[位置](%)= charactersLength;
}而(里程表[位置++] == 0&功放;&安培;位置<长度);
}
}
私有静态无效WriteBruteForce(INT []里程表和char []字符){
//打印倒退
的for(int i = odometer.Length - 1; I> = 0;我 - ){
Console.Write(字符[里程表[I]]);
}
Console.WriteLine();
}
I want to write a odometer-like method in a C#-style-language, but not just using 0-9 for characters, but any set of characters. It will act like a brute-force application, more or less.
If I pass in a char-array of characters from 0 to J, and set length to 5, I want results like 00000, 00001, 00002... HJJJJ, IJJJJJ, JJJJJ.
Here is the base, please help me expand:
protected void Main()
{
char[] chars = new char[] { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J' };
BruteForce(chars, 5);
}
private void BruteForce(char[] chars, int length)
{
// for-loop (?) console-writing all possible combinations from 00000 to JJJJJ
// (when passed in length is 5)
// TODO: Implement code...
}
解决方案
This is one of the solutions I've found. I like the compactness and separation of it:
private static char[] characters =
new char[] { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J' };
// length: The length of the string created by bruteforce
public static void PerformBruteForce(int length) {
int charactersLength = characters.Length;
int[] odometer = new int[length];
long size = (long)Math.Pow(charactersLength, length);
for (int i = 0; i < size; i++) {
WriteBruteForce(odometer, characters);
int position = 0;
do {
odometer[position] += 1;
odometer[position] %= charactersLength;
} while (odometer[position++] == 0 && position < length);
}
}
private static void WriteBruteForce(int[] odometer, char[] characters) {
// Print backwards
for (int i = odometer.Length - 1; i >= 0; i--) {
Console.Write(characters[odometer[i]]);
}
Console.WriteLine();
}
这篇关于算法:里程表/蛮力的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文