Foxtable(狐表)用户栏目专家坐堂 → 请教排列与组合


  共有1752人关注过本帖树形打印复制链接

主题:请教排列与组合

帅哥哟,离线,有人找我吗?
hbhb
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:狐神 帖子:5054 积分:13025 威望:0 精华:0 注册:2014/5/15 21:34:00
请教排列与组合  发帖心情 Post By:2016/1/27 10:09:00 [只看该作者]

大师:好!请教如何求得数组元素为(a,b,c,d,f,g)中取两个元素的排列与组合的集合?

 回到顶部
帅哥哟,离线,有人找我吗?
大红袍
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2016/1/27 10:10:00 [只看该作者]


 回到顶部
帅哥哟,离线,有人找我吗?
hbhb
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:狐神 帖子:5054 积分:13025 威望:0 精华:0 注册:2014/5/15 21:34:00
  发帖心情 Post By:2016/1/27 10:22:00 [只看该作者]

您那是显示,我想要返回集合,改哪句代码?增加如下红色部分代码,为何不能返回集合?

Dim a() As String = args(0)
Dim n As Integer = args(1)
Dim m As Integer = args(2)
Dim b() As String = args(3)
Dim Mm As Integer = args(4)


dim jh as new list(of string)

jh.clear

For i As Integer = n To m Step -1
    b(m-1) = i-1
    If m > 1 Then
        Functions.Execute("loop", a, i-1, m-1, b, Mm)
    Else
        Dim result As String = ""
        For j As Integer = Mm - 1 To 0 Step -1
            result &= a(b(j)) & "|"
        Next

    jh.add(result.Trim("|"))
        output.show(result.Trim("|"))
    End If
Next

return jh



 回到顶部
帅哥哟,离线,有人找我吗?
大红袍
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2016/1/27 10:24:00 [只看该作者]

定义一个public变量

 

public jh as list(of string)

 

调用函数志强

 

jh = new list(of string)

 

在函数里面直接add,不需要dim


 回到顶部
帅哥哟,离线,有人找我吗?
hbhb
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:狐神 帖子:5054 积分:13025 威望:0 精华:0 注册:2014/5/15 21:34:00
  发帖心情 Post By:2016/1/27 10:26:00 [只看该作者]

谢谢!那排列怎么改?

 回到顶部
帅哥哟,离线,有人找我吗?
大红袍
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2016/1/27 10:29:00 [只看该作者]

什么排列?说明需求。

 回到顶部
帅哥哟,离线,有人找我吗?
hbhb
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:狐神 帖子:5054 积分:13025 威望:0 精华:0 注册:2014/5/15 21:34:00
  发帖心情 Post By:2016/1/27 10:34:00 [只看该作者]

数学层面排列(a,b,c)  为ab\ac\bc\ba\cb\ca。

 回到顶部
帅哥哟,离线,有人找我吗?
大红袍
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2016/1/27 11:59:00 [只看该作者]

mark 排列组合 写一个规范一点的类

 

全局代码

 

Public Class PermutationAndCombination(Of T)
 ''' <summary>
 ''' 交换两个变量
 ''' </summary>
 ''' <param name="a">变量1</param>
 ''' <param name="b">变量2</param>
 Public Shared Sub Swap(ByRef a As T, ByRef b As T)
  Dim temp As T = a
  a = b
  b = temp
 End Sub

 ''' <summary>
 ''' 递归算法求数组的组合(私有成员)
 ''' </summary>
 ''' <param name="list">返回的范型</param>
 ''' <param name="t">所求数组</param>
 ''' <param name="n">辅助变量</param>
 ''' <param name="m">辅助变量</param>
 ''' <param name="b">辅助数组</param>
 ''' <param name="M">辅助变量M</param>
 Private Shared Sub GetCombination(ByRef list As List(Of T()), t As T(), n As Integer, m__1 As Integer, b As Integer(), M__2 As Integer)
  For i As Integer = n To m__1 Step -1
   b(m__1 - 1) = i - 1
   If m__1 > 1 Then
    GetCombination(list, t, i - 1, m__1 - 1, b, M__2)
   Else
    If list Is Nothing Then
     list = New List(Of T())()
    End If
    Dim temp As T() = New T(M__2 - 1) {}
    For j As Integer = 0 To b.Length - 1
     temp(j) = t(b(j))
    Next
    list.Add(temp)
   End If
  Next
 End Sub

 ''' <summary>
 ''' 递归算法求排列(私有成员)
 ''' </summary>
 ''' <param name="list">返回的列表</param>
 ''' <param name="t">所求数组</param>
 ''' <param name="startIndex">起始标号</param>
 ''' <param name="endIndex">结束标号</param>
 Private Shared Sub GetPermutation(ByRef list As List(Of T()), t As T(), startIndex As Integer, endIndex As Integer)
  If startIndex = endIndex Then
   If list Is Nothing Then
    list = New List(Of T())()
   End If
   Dim temp As T() = New T(t.Length - 1) {}
   t.CopyTo(temp, 0)
   list.Add(temp)
  Else
   For i As Integer = startIndex To endIndex
    Swap(t(startIndex), t(i))
    GetPermutation(list, t, startIndex + 1, endIndex)
    Swap(t(startIndex), t(i))
   Next
  End If
 End Sub

 ''' <summary>
 ''' 求从起始标号到结束标号的排列,其余元素不变
 ''' </summary>
 ''' <param name="t">所求数组</param>
 ''' <param name="startIndex">起始标号</param>
 ''' <param name="endIndex">结束标号</param>
 ''' <returns>从起始标号到结束标号排列的范型</returns>
 Public Shared Function GetPermutation(t As T(), startIndex As Integer, endIndex As Integer) As List(Of T())
  If startIndex < 0 OrElse endIndex > t.Length - 1 Then
   Return Nothing
  End If
  Dim list As New List(Of T())()
  GetPermutation(list, t, startIndex, endIndex)
  Return list
 End Function

 ''' <summary>
 ''' 返回数组所有元素的全排列
 ''' </summary>
 ''' <param name="t">所求数组</param>
 ''' <returns>全排列的范型</returns>
 Public Shared Function GetPermutation(t As T()) As List(Of T())
  Return GetPermutation(t, 0, t.Length - 1)
 End Function

 ''' <summary>
 ''' 求数组中n个元素的排列
 ''' </summary>
 ''' <param name="t">所求数组</param>
 ''' <param name="n">元素个数</param>
 ''' <returns>数组中n个元素的排列</returns>
 Public Shared Function GetPermutation(t As T(), n As Integer) As List(Of T())
  If n > t.Length Then
   Return Nothing
  End If
  Dim list As New List(Of T())()
  Dim c As List(Of T()) = GetCombination(t, n)
  For i As Integer = 0 To c.Count - 1
   Dim l As New List(Of T())()
   GetPermutation(l, c(i), 0, n - 1)
   list.AddRange(l)
  Next
  Return list
 End Function


 ''' <summary>
 ''' 求数组中n个元素的组合
 ''' </summary>
 ''' <param name="t">所求数组</param>
 ''' <param name="n">元素个数</param>
 ''' <returns>数组中n个元素的组合的范型</returns>
 Public Shared Function GetCombination(t As T(), n As Integer) As List(Of T())
  If t.Length < n Then
   Return Nothing
  End If
  Dim temp As Integer() = New Integer(n - 1) {}
  Dim List As New List(Of T())()
  GetCombination(List, t, t.Length, n, temp, n)
  Return List
 End Function
End Class

 

 

调用代码

 

Dim arr As String() = {"a", "b", "c"}
'求排列
Dim lst_Permutation As List(Of String()) = PermutationAndCombination(Of String).GetPermutation(arr, 2)
'求组合
Dim lst_Combination As List(Of String()) = PermutationAndCombination(Of String).GetCombination(arr, 2)

For Each ary As String() In lst_Permutation
    output.show(ary(0) & ary(1))
Next
output.show("-------------------------")
For Each ary As String() In lst_Combination
    output.show(ary(0) & ary(1))
next


 回到顶部
帅哥哟,离线,有人找我吗?
hbhb
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:狐神 帖子:5054 积分:13025 威望:0 精华:0 注册:2014/5/15 21:34:00
  发帖心情 Post By:2016/1/27 12:45:00 [只看该作者]

我的妈呀,太厉害了。佩服图片点击可在新窗口打开查看

 回到顶部