Vb.net VB网络中最快的数字置换码

Vb.net VB网络中最快的数字置换码,vb.net,algorithm,numbers,permutation,Vb.net,Algorithm,Numbers,Permutation,有一个著名的、最快的排列代码,没有任何“函数”,VB.Net可以将数字排列成几行,不幸的是,我记不起来了 有人知道这个密码吗?或者像这样知道 代码的某些部分如下所示: 更新:我找到了。此处的所有工作代码: Dim L(4) As Byte Dim I As Byte Dim K As Byte Dim J As Byte Dim RESULTS As String Dim UB, UBm1 As Integer L = {1, 2, 3, 4, 5} UB = L.GetUpperBound

有一个著名的、最快的排列代码,没有任何“函数”,VB.Net可以将数字排列成几行,不幸的是,我记不起来了

有人知道这个密码吗?或者像这样知道

代码的某些部分如下所示:

更新:我找到了。此处的所有工作代码:

Dim L(4) As Byte
Dim I As Byte
Dim K As Byte
Dim J As Byte
Dim RESULTS As String
Dim UB, UBm1 As Integer

L = {1, 2, 3, 4, 5}

UB = L.GetUpperBound(0)
UBm1 = UB - 1

Do
    I = UBm1
    Do While I > 0 And L(I) >= L(I + 1)
        I -= 1
    Loop
    K = L(I)
    J = UB
    Do While J > 0 And L(J) <= K
        J -= 1
    Loop

    RESULTS = L(0) & "," & L(1) & "," & L(2) & "," & L(3) & "," & L(4)

    L(I) = L(J)
    L(J) = K
    Array.Reverse(L, I + 1, UB - I)

Loop While J
Dim L(4)作为字节
作为字节的Dim I
将K变为字节
Dim J作为字节
将结果设置为字符串
Dim UB,UBm1为整数
L={1,2,3,4,5}
UB=L.GetUpperBound(0)
UBm1=UB-1
做
I=UBm1
当I>0且L(I)>=L(I+1)时执行
I-=1
环
K=L(I)
J=UB

当J>0和L(J)看起来你在找这个

(2.字典顺序和寻找下一个排列)

如果是,则
I
J
的起始值不正确(它们应分别为4和5,而不是3和4)

(我知道该示例使用了
交换
,但可以用一个冒号分隔的行替换。)

Dim L(4)作为字节
L={1,2,3,4,5}
将K变为字节
对于N为整数=1到120'的排列数:5!
尺寸I为字节=4,J为字节=5
而L(I-1)>=L(I)
I-=1
结束时

而L(J-1)看起来你在寻找这个

(2.字典顺序和寻找下一个排列)

如果是,则
I
J
的起始值不正确(它们应分别为4和5,而不是3和4)

(我知道该示例使用了
交换
,但可以用一个冒号分隔的行替换。)

Dim L(4)作为字节
L={1,2,3,4,5}
将K变为字节
对于N为整数=1到120'的排列数:5!
尺寸I为字节=4,J为字节=5
而L(I-1)>=L(I)
I-=1
结束时

当L(J-1)用于获得一组自然数的置换时(建议小于10,尽管可能大于10),这个VBA Excel子程序非常快速和简短。我相信把它转换成VB.NET是很容易的。看一看

Const P = 5                                     'Recommended Max P = 9
Dim m As Long, PArray(1 To 1000, 1 To P)        'Recommended Max 9! = 362880

Public Sub PermutationNaturalNumber()
    Dim Q(1 To P) As Long
    For m = 1 To P: Q(m) = m: Next: m = 0
    PermutationGenerator P, Q
    Range("A1").Resize(UBound(PArray), P) = PArray: End
End Sub

Sub PermutationGenerator(n As Long, Q() As Long)
    Dim i As Long, j As Long, k As Long
    If n > 1 Then
        For i = 1 To n - 1
            PermutationGenerator n - 1, Q
            If n Mod 2 = 1 Then j = 1 Else j = i
            k = Q(j): Q(j) = Q(n): Q(n) = k
        Next
        PermutationGenerator n - 1, Q
    Else
        m = m + 1: For i = 1 To P: PArray(m, i) = Q(i): Next
    End If
End Sub

p
可以是任何自然数,在本例中为{1,2,3,4,5}。确保用P更改
PArray
的上限!意思是(
P*(P-1)*(P-2)*…*1
)。

对于获得一组自然数的排列(建议小于10,但可以大于10),这个VBA Excel子例程非常快且短。我相信把它转换成VB.NET是很容易的。看一看

Const P = 5                                     'Recommended Max P = 9
Dim m As Long, PArray(1 To 1000, 1 To P)        'Recommended Max 9! = 362880

Public Sub PermutationNaturalNumber()
    Dim Q(1 To P) As Long
    For m = 1 To P: Q(m) = m: Next: m = 0
    PermutationGenerator P, Q
    Range("A1").Resize(UBound(PArray), P) = PArray: End
End Sub

Sub PermutationGenerator(n As Long, Q() As Long)
    Dim i As Long, j As Long, k As Long
    If n > 1 Then
        For i = 1 To n - 1
            PermutationGenerator n - 1, Q
            If n Mod 2 = 1 Then j = 1 Else j = i
            k = Q(j): Q(j) = Q(n): Q(n) = k
        Next
        PermutationGenerator n - 1, Q
    Else
        m = m + 1: For i = 1 To P: PArray(m, i) = Q(i): Next
    End If
End Sub

p
可以是任何自然数,在本例中为{1,2,3,4,5}。确保用P更改
PArray
的上限!意思是(代码> P*(P-1)*(P-2)** 1 )。我也很感兴趣,因为我也创建了一个,但是我有一个功能,因为我创建了一个功能,但有一个功能是,我正在寻找,但是这是C++写的,我不知道,所以我不能把它转换成VB。互联网上有一个网页,上面有VB Net中的代码。在该代码中,这些值工作正常。代码之间可能有所不同。我需要在VB网络的代码。感谢您的帮助。行“While L[I-1]”…“I”带下划线,表示“括号中的标识符缺少结尾]”,行“While L[J-1]”表示“J”也表示相同的内容。我用“]”关闭了它,没有工作。我碰巧用了“()”,不再工作了。我正在使用VB.NET2010,也许会有所不同。我真的不想让你再累了,但也许其他人可以使用这种快速代码。衷心感谢。@Serhat ahhhh道歉我忘了VB使用括号而不是括号,现在将为您编辑(我已经几个月没有使用VB了,我已经生锈了)哈哈。没问题。我已将它们改为括号,并尝试了代码。所有结果现在都是相同的“1,2,3,4,5”,“1,2,3,4,5”,“1,2,3,4,5”。。。等等,这很难,不是吗?我用代码吃了我的大脑,现在你也在说:“我又写了一个愚蠢的错误:我写了代码> i+=1:I= 1,<代码>,除了完全冗余之外,应该是代码> i+= 1:j= 1 < /代码>是的,我正寻找它,但是这是C++写的,我不知道,所以我不能把它转换成VB。互联网上有一个网页,上面有VB Net中的代码。在该代码中,这些值工作正常。代码之间可能有所不同。我需要在VB网络的代码。感谢您的帮助。行“While L[I-1]”…“I”带下划线,表示“括号中的标识符缺少结尾]”,行“While L[J-1]”表示“J”也表示相同的内容。我用“]”关闭了它,没有工作。我碰巧用了“()”,不再工作了。我正在使用VB.NET2010,也许会有所不同。我真的不想让你再累了,但也许其他人可以使用这种快速代码。衷心感谢。@Serhat ahhhh道歉我忘了VB使用括号而不是括号,现在将为您编辑(我已经几个月没有使用VB了,我已经生锈了)哈哈。没问题。我已将它们改为括号,并尝试了代码。所有结果现在都是相同的“1,2,3,4,5”,“1,2,3,4,5”,“1,2,3,4,5”。。。等等,这很难,不是吗?我在用代码折磨我的大脑,现在你也:)@Serhat sry再次代表我犯了另一个愚蠢的错误:我写了
I+=1:I-=1
,除了完全多余之外,应该是
I+=1:J-=1