西游记的好句子好段:求助:qbasic字符串编程问题

来源:百度文库 编辑:高校问答 时间:2024/05/04 17:42:11
编程序从键盘输入4个字符串,如果某字符串末尾一个字符与另一字符串开头字符相同,就把两个字符串接起来,每次字符串最多被用一次,怎样接能够得到最长的结果?
这是电子工业出版社出版的QBASIC教材上的习题
朱若愚主编
谢谢,如果编程能运行,我还可加分,多少可商量

谢谢yuxichu,你希望要多少分呢?

这个问题应该是一个NP难问题,不过它只有四个字符串,还是可以求解,下面给出一个常规的算法,求解这个问题是很快的。

下面的函数求出它们连接后最长的字符串,至于接收用户输入、显示结果,你就自己搞定吧。

祝你好运!

=========================================================

'4个字符串,如果某字符串末尾一个字符与另一字符串开头字符相同,就把两个字符串接起来,
'每次字符串最多被用一次,得到最长的结果
Function MaxString(ByVal a As String, ByVal b As String, ByVal c As String, ByVal d As String) As String

Dim str(4) As String '字符串数组,第一个元素设为0
Dim used(4) As Boolean '指示字符是否已被选择
Dim seq(3) As Long '指示选择的次序
Dim tmp As String '临时字符串

Dim i As Long, j As Long, k As Long, x As Long

str(1) = a: str(2) = b: str(3) = c: str(4) = d
used(0) = True: MaxString = ""

For i = 0 To 625 '5^4

'选择一个字符串序列
For j = 1 To 4
used(j) = False
Next j
k = 0: j = i
While (j > 0)
x = j Mod 5
If used(x) = False Then
seq(k) = x
k = k + 1
used(x) = True
End If
j = j \ 5
Wend

'计算当前选择的字符串序列
tmp = ""
For j = 0 To k - 1
If tmp = "" Then
tmp = str(seq(j))
Else
If Right(tmp, 1) = Left(str(seq(j)), 1) Then
tmp = tmp & str(seq(j))
End If
End If
Next j

'检查是否到目前为止的最长字符串
If Len(tmp) > Len(MaxString) Then
MaxString = tmp
End If
Next i

End Function

思想
设 A B C D四个字符串
先检查4个当中每个字符串的首尾跟另两个是否相同如果相同把她作为3个字符串的中间,然后还剩3个在检查

编程
时间太长了,具体的语句命令都不记得了

要不这样吧,你重装一下系统,说不定可以啊,不行在说吧!!