算法:里程表/蛮力 [英] Algorithm: Odometer / Brute force

查看:157
本文介绍了算法:里程表/蛮力的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想写一个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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆