现在有一个函数定义如下
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
等等之类的情况,我没写全。我冥思苦想了好几天,可是还没有想出合适的算法来解决这个问题。
请各位达人指教,拜谢于此了。
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
等等之类的情况,我没写全。我冥思苦想了好几天,可是还没有想出合适的算法来解决这个问题。
请各位达人指教,拜谢于此了。
并且,不允许有两个A出现,两个B出现等等
0010=c
0011=cd
0100=b
...
...
1110=abc
1111=abcd
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
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