现在有一个函数定义如下
Function fixmarc(ByVal v1 As String, ByVal v2 As String, ByVal v3 As String, ByVal v4 As String) as string
   xxxxxxxxxxxxxxx'这是当中过程
End Function传入参数V1,V2,V3,V4是四个字符串变量,比如说是A,B,C,D,这个函数的目的是把这四个字符串联接起来,规则是A,B,C,D中至少有一个字母存在,并且不允许出现重复。而且出现的位置也有要求,就是A要出现在B,C,D的前面,B要出现在C,D的前面,C要出现在D的前面。
这样可能出现的情况就有A
B
C
D
AB
AC
AD
BC
BD
CD
ABC
ACD
BCD
CD
ABCD
等等之类的情况,我没写全。我冥思苦想了好几天,可是还没有想出合适的算法来解决这个问题。
请各位达人指教,拜谢于此了。

解决方案 »

  1.   

    如果你传入的参数都是单个字符的话,前后顺序可以按照ascii码排列,“规则是A,B,C,D中至少有一个字母存在,并且不允许出现重复”这句没看明白
      

  2.   

    就是至少一个字母存在,比如只有A,而BCD不存在
    并且,不允许有两个A出现,两个B出现等等
      

  3.   

    好像挺简单的吧如果我用二进制来表示,四位非别对应ABCD,0000表示都不出现,用1111表示都出现那么从0001到1111的循环输出不就是了吗?0001=d
    0010=c
    0011=cd
    0100=b
    ...
    ...
    1110=abc
    1111=abcd
      

  4.   

    Private Sub Command1_Click()
        Call fixmarc("AAADDD", "ABCFG", "PCL", "BACLEEWX")
    End SubPrivate Function fixmarc(ByVal v1 As String, ByVal v2 As String, ByVal v3 As String, ByVal v4 As String) As String
       'xxxxxxxxxxxxxxx '这是当中过程
       Dim strSS As String
       Dim intII As Integer
       Dim intLen As Integer
       
       strSS = v1 & v2 & v3 & v4
       intLen = Len(strSS)
       Debug.Print strSS
       
       intII = 1
       Do While intII < intLen
            strSS = Left(strSS, intII) & Replace(strSS, Mid(strSS, intII, 1), "", intII + 1)
            Debug.Print strSS
            intII = intII + 1
       Loop
       
       Debug.Print strSS
       fixmarc = strSS
       
    End Function
      

  5.   

    嘿嘿,楼主要的是不是就是这样的效果阿
    Private Sub Form_Click()
    Dim i As Long
        For i = 1 To 15
            If i And 8 Then Print "a";
            If i And 4 Then Print "b";
            If i And 2 Then Print "c";
            If i And 1 Then Print "d";
            Print
        Next i
    End Sub