Vb.net VB网络中最快的数字置换码
有一个著名的、最快的排列代码,没有任何“函数”,VB.Net可以将数字排列成几行,不幸的是,我记不起来了 有人知道这个密码吗?或者像这样知道 代码的某些部分如下所示: 更新:我找到了。此处的所有工作代码: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
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