
Const n1 = 6 ‘ 第1段已排序数据长度为n1
Const r2 = 5 ‘ 第2段已排序数据长度为n2
Dim c (1 To n1 + n2) As Integer ‘ 数组c长度为n1+n2,依次存储第1、2段数据
Private sub Command1_Click ( )
‘ 数组c依次存储两段已按从小到大排序的数据,并在列表框List1中显示’
‘ 代码略
List2. Clear
‘ A位置
For i = n1+1 To n1 + n2
![]()
‘B位置
Do While j > 1 and Flag
If ① Then
t = c(j): c(j) = c(j-1): c(j-1) = t
‘ C位置
Else
Flag = False
End If
②
Loop
Next i
For i = 1 To n1 + n2
List2. AddItem c(i)
Next i
End sub
① ②
例如:n=3时,第1次取1根,第2次取2根,此时正好取完,无须添加火柴,k=0;
例如:n=8时,第1次取1根,第2次取2根,第3次取3根,第4次要取4根,但剩余2根不够取。则加上1根,剩余3根,再从1根开始取,即第4次取1根,第5次取2根,剩余火柴为0,游戏结束,得k=1。
又如:n=4时,第1次取1根,第2次取2根,第3次不够取,若加上1根,剩余2根,再从1根开始取,第3次取1根,剩余1根不够第4次取,再加1根,又是剩余2根,显然加1根永远不可能取完。所以改用每次加2根,第1次取1根,第2次取2根,第3次不够取,添加2根,第3次取1根,第4次取2根,恰好能取完,得k=2。
编写一个VB程序可实现上述功能:在文本框Text1中输入火柴数量,单击“计算”按钮,在文本框Text2中显示最少添加数量,程序运行界面如下图所示:
实现上述功能的程序代码如下:
Private Sub ok_Click()
Dim a(1 To 100) As Boolean, n As Integer, k As Integer, i As Integer
n = Val(Text1.Text)
For i = 1 To 100
a(i) = False
Next i
a(n) = True
Do While n <> 0
i = 1
Do While i <= n
①
i = i + 1
Loop
If n = 0 Then
Text2.Text = Str(k)
Else
If k = 0 Then k = 1
n = n + k
If ② Then
k = k + 1
n = Val(Text1.Text)
Else
a(n) = True
End If
End If
Loop
End Sub
① ②
合并规则如下:
⑴当字符串1的长度大于字符串2的长度时,将字符串2中的各个字符从左侧依次插入到字符串1中的各字符后方。例如字符串1为“abcdef”,字符串2为“123”时,合并后的字符串为“a1b2c3def”。
⑵当字符串2的长度大于等于字符串1的长度时,将字符串1中的各个字符从右侧依次插入到字符串2中的各个字符后方。例如字符串1为“abcd”,字符串2为“12345”时,合并后的字符串为“12d3c4b5a”。
程序运行界面如图所示。
Private Sub Command1_Click()
Dim s1 As String,s2 As String,arts As String
Dim n As Integer,m As Integer,i As Integer
s1=Text1.Text
s2=Text2.Text
m=Len(s1)
n=Len(s2)
If m>n Then
For i=1 To n
ans=ans+Mid(s1,i,1)+Mid(s2,i,1)
Next i
ans=ans+Mid(s1,i,m-n)
Else
For i=1 To m
ans= ① +Mid(s1,i,1)+ans
Next i
ans=Mid(s2,1,n-m)+aFIS
②
Label3.Caption=”合并为”+ans
End Sub
① ②