【问题标题】:Find all permutations from 1-9 and A-F查找 1-9 和 A-F 的所有排列
【发布时间】:2014-10-17 16:37:23
【问题描述】:

我正在尝试从以下条件中找到所有可能的排列:

数字范围 1-99

字母范围 A-F

32位长字符串

您有什么建议可以让我的生活更轻松?试图在 vb 中搜索排列,但找不到它们,我不知道为什么,但这似乎不是一项艰巨的任务:s

样品:

9A E5 4B CA BD 93 DE 2E 01 00 00 01 00 00 00 00

6E C7 9A CF CB A7 67 D9 17 EE 6B 70 F0 5E E4 32

64 86 00 EA 91 71 65 67 1F CE FE EB B1 CC 07 84

63 C0 8A AD F7 9F 5D F3 06 01 00 07 00 00 00 00

51 16 15 7C 56 9F 0A FF 55 1C 20 91 58 CD AA CF

48 61 56 FF 41 6E 49 F8 45 70 49 FE 54 75 52 1B

45 BA B8 B7 42 52 E3 77 03 00 00 03 00 00 00 00

40 D0 F4 04 BF AF 2B 99 02 00 00 02 00 00 00 00

40 30 90 00 3F 7C 83 3E 68 98 D5 D5 6D D9 A3 E9

FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF

FE A1 CE 6D A6 82 A9 D1 00 00 00 00 00 00 00 00

感谢您的帮助!

编辑:

这是我的代码

Public Class Form1
Dim c As Integer
Dim p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, a As String
Dim combo As String
Dim random As Random
Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
    c = -1
    While c <= 99
        c = c + 1
        If c < 10 Then
            a = "0" & c
        Else : a = c
        End If
        p1 = a
        p2 = 2
        combo = p1 + " " + p2 + " " + p3 + " " + p4 + " " + p5 + " " + p6 + " " + p7 + " " + p8 + " " + p9 + " " + p10 + " " + p11 + " " + p12 + " " + p13 + " " + p14 + " " + p15 + " " + p16 + " " + vbNewLine
        RichTextBox1.AppendText(combo + vbNewLine)
    End While
End Sub

结束类

【问题讨论】:

  • 这不是代码编写服务。您需要付出一些努力,并向我们展示您迄今为止尝试过的代码。
  • 要求我们为您的要求编写代码的问题对于 Stack Overflow 来说是无关紧要的,因为它们不是解决代码的特定问题,而是要求社区为你做你的工作。相反,尝试编写代码,如果遇到问题,将问题缩小到特定问题,并展示迄今为止为尝试解决问题所做的工作。
  • 您没有包含任何与排列有关的内容。您提供了一些数据的十六进制转储(可能是文件的一部分)。你到底在问什么,到目前为止你自己尝试过什么?
  • 你会忽略“数字和字母”,因为这是字节的十六进制表示法(AF == 175)有 16 个字节,每个字节可以容纳 0 到 255,所以你有 340,282,366,920,938,463,463,374,607,431,768,211,455 种可能的组合。
  • 我发布了一个获取 00-FF 之间所有值的解决方案,然后意识到你想要 00-FF 的 16 种组合......这就像@AlexK 一样疯狂。指出。

标签: vb.net vba basic


【解决方案1】:

从你的例子来看,你的意思是 0-9(不是 1-9)和 A-F

Alex K. 巧妙地提供了解决这个问题的方向:

您会忽略“数字和字母”,因为它是十六进制 字节表示法 (AF == 175) 有 16 个字节,每个字节可以 保持 0 到 255 所以你有 340,282,366,920,938,463,463,374,607,431,768,211,455 可能 组合。

虽然理论上可以获得所有这些排列,但您的计算机需要大约 34,028,236,692,093,846,346,337,460,743 GB。我认为总共没有多少内存

如果它是一个相对较小的数字,我们可以通过以下方法简单地做到这一点:

Sub purgatory()
    Dim counter As Long
    Dim output As String

    counter = 0
    For counter = 0 To 2147483647#
        output = String(16 - Len(Hex(counter)), "0") & Hex(counter)
        MsgBox output
    Next counter
End Sub

但是 VBA7 中 long 的最大值是 2,147,483,648(4 字节 / 2),或者 VB 网络中的 8 字节。这意味着 12 个字节和一位将始终为 0。这可以通过一些嵌套的 for 循环来解决。

我认为 JNevill 最好地回答您的问题

00-FF 的 16 种组合……这太疯狂了……

重要提示:如果您运行我发布的代码,请务必先熟悉 Ctr+Pause/Break。最快的出狱方法 ;)

【讨论】:

  • 它是一个 128 位的数字,所以它基本上与询问每个可能的 GUID 相同!
猜你喜欢
  • 2014-09-07
  • 1970-01-01
  • 2014-04-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多