删数问题。输入一个数字串s,删去其中k个数字(k<数字串中数字的个数),使剩余数字在保持相对位置不变的情况下构成一个值最小的整数。例如,s=“19990608”,k=4,处理结果:608。
删数的算法如下:
⑴如果k>0,则从前往后检测相邻字符,否则,转(3);
⑵①若所有相邻字符都已非降序,则将串尾k个字符删去,k值置0,转(1);②若相邻两数存在逆序(即前一个数>后一个数),则将前一个数删除,k值变化,然后回到(1);
⑶去掉串首的0,输出结果。
按照上述算法思路,编写了VB程序,功能如下:在文本框Text1中输入数字串,在文本框Text2中输入删除的个数,单击“处理”按钮Command1,在文本框Text3中显示最小的整数。程序运行界面如下图所示。
(1)
如果输入的数字串为“20160125”,删除个数为4,则结果是。
(2)
实现上述功能的VB程序如下,请在划线处填入合适代码。
delete函数说明:(delete st,x,y)为自定义函数,功能为在字符串st中删除x位置开始的y长度的子串。
Private Sub Command1_Click
()
Dim s As String, k As Integer
Dim i As Integer, j As
Integer, n As Integer
s = Text1.Text
k = Val(Text2.Text)
n = Len(s)
Do While k>0
i=1
Do While i<n And
i=i+1
Loop
If i=n Then
n=n-k
k = 0
Else
s = delete(s, i, 1)
n=n-1
End If
Loop
i= 1
Do While n>1 And Mid(s,1,1)=
“0”
s = delete(s,1 ,1)
i = i+1
n = n-1
Loop
Text3.Text = s
End Sub
Function delete(st As String,x
As Integer,y As Integer) As String
delete=Mid(st,1,x-1)+Mid(st,x+y)
‘Mid函数第3个参数省略,则截去从开始位置向右到字符串结尾的所有字符
End Function
答案: 【1】12
【1】Mid(s,i,1)<=Mid(s,i+1,1)【2】s= delete(s,n-k+1 ,k)【3】k=k-1