-1

ゲームのすべての可能なソリューションを取得し、それをブルートフォースすることをループする必要があります。長さ 25 文字で、1 ~ 5 の数字のみを含むすべての文字列を取得する必要があります。25 の for ループを必要としない簡単な方法はありますか?

4

2 に答える 2

0

再帰は、この種の問題に最適です。疑似コードを提供します。VB.NET を記述できます。

build_number( digit_array, current_digit)
is
    if current_digit = digit_array.length
    then
        call use_number(digit_array)
    else
        loop digit_array[current_digit] from 1 to 5
            call build_number(digit_array, current_digit + 1)
        next
    end
end

call build_number(new sbyte[25], 0)

System.String実際に数字を格納するために使用すると、膨大な数のガベージ文字列が作成されることに注意してください。配列またはStringBuilder.

ただし、文字列を生成する効率的な方法を使用しても、ブルート フォース アプローチは、64 ビット キーを使用したブルート フォース暗号化のタスクに複雑に近づいています。つまり、実行可能ですが、非常に時間がかかります。あなたは間違いなくいくつかの木の剪定技術を調べたいと思うでしょう.

そして、ここにある厄介な並列処理を利用してください。

于 2013-11-11T15:44:32.567 に答える
0

25 の for ループを必要としない、これを行う簡単な方法を誰かが持っていますか?

コストはわかりませんが、BigInteger 型を使用するということは、必要なループが 1 つだけであることを意味します。

Imports System.Numerics.BigInteger

    Dim BadNums As String = "67890"
    Dim sw As New IO.StreamWriter("AllNums.txt")
    For I As Numerics.BigInteger = Numerics.BigInteger.Parse("1111111111111111111111111") To Numerics.BigInteger.Parse("5555555555555555555555555")
        Dim temp As String = I.ToString
        Dim index As Integer = temp.IndexOf("6"c)
        If index < 0 Then
            sw.WriteLine(temp)
        Else
            I += 5 * (Pow(10, 24 - index)) - 1
        End If
    Next
    sw.Close()

これは、適合しない値をスキップしてループを短絡します。各文字列はテキスト ファイルに書き込まれます。

于 2013-11-11T19:25:59.793 に答える