题库 高中信息

题干

(加试题)最大回文子串。回文字符串是具有回文特性的字符串:即该字符串从左向右读, 与从右向左读都一样.如:凤落梧桐梧落凤,abcba 等。“最大回文子串”是指一个字符串中长 度最大的回文字符串,其基本算法思想如下:
(1)每个回文都有一个“中心”,当回文字符数为奇数时,中间的那个字符就是回文中心;但是当回文的字符数为偶数时,回文的中心是最中间的那两个字符,且这两个字符相同。
(2)对任意一个字符或者相同的两个连续字符,我们都可以假设它为回文的“中心”,向它的 左右两边扩展出尽可能长的回文。对于每种假设,我们都能得到一个回文,而最长回文必定由 其中的某个假设中得到!
现编写一个 V
A.程序,在 Text1 中输入一串字符,单击“统计”按钮,在 Text2 中显示该字 符串中的最大的回文子串(长度相同时,输出最左边的子串)。请回答下列问题:
(1)当 Text1 中输入“123321344332423112113123”时,则输出的结果为_________。
(2)请在划线处填入合适的代码。
Dim n As Integer
Dim a(0 To 100) As String Private Sub Command1 Click() Dim s As String
Dim left As Integer, right As Integer, i As Integer
Dim max As Integer, m As Integer, b1 As Integer
'变量 b1 用于记录回文子串的左端起点 Text2.Text = ""
s = Text1.Text n = Len(s)
For i = 1 To n

a(i) = Mid(s, i, 1) Next i

max = 0: left = 0: right = 0
For i = 1 To n left = i
right = i
m = longest(left, right) If m > max Then
b1 = i - m \ 2 max = m
End If left = i
right = i + 1
If a(left) = a(right) Then
m = longest(left, right) + 1
If m > max Then
①________
max = m
End If
End If
Next i
For i = b1 To ②________

Text2.Text = Text2.Text + a(i) Next i

End Sub
Function longest(left As Integer, right As Integer) As Integer
Dim p As Integer p = 1
Do While left > 1 And right < n And ③________
left = left - 1 right = right + 1 p = p + 2
Loop
longest = p
End Function
上一题 下一题 0.99难度 填空题 更新时间:2019-05-06 08:19:10

答案(点此获取答案解析)

同类题1

我国居民身份证号是由 18 位字符组成,其中前 17 位是数字,第 18 位是校验位(校验
位字符在“0”~“9”或“X”中选取)。由前 17 位数字经过一定的规则计算得到校验值, 在查验居民身份证号有效性时,如果校验位中的字符与计算所得校验值相等则身份证号有效, 否则无效。
校验值计算规则如下:
第一步:将身份证号前 17 位数字分别乘以不同的系数后相加,对应系数如下表所示。
位数
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
系数
7
9
10
5
8
4
2
1
6
3
7
9
10
5
8
4
2
 
第二步:将第一步的计算结果除以 11,得到余数。 第三步:根据第二步的计算结果从下表获取对应的校验值。
余数
0
1
2
3
4
5
6
7
8
9
10
校验值
1
0
X
9
8
7
6
5
4
3
2
 
例如:某身份证号为 34052419800101001X。要计算此身份证的校验值步骤如下: 第一步:计算 3*7+4*9+0*10+5*5+……+1*2=189
第二步:189 除以 11 得到余数为 2
第三步:由余数 2 获取校验值 X。
根据以上规则小王编写了一个验证身份证号是否有效的 VB 程序,功能如下:在文本框 Text1 中输入身份证号,单击“验证”按钮 Command1 后,在列表框 List1 中显示验证结果。 程序运行界面如图1 所示。
(1)设计程序界面时,应使用图 2 中的____(填写相应编号)添加列表框对象 List1。

(2)实现上述功能的 VB 程序如下,请在划线处填入合适代码。
Private Sub Command1_Click()
Dim i As Integer, a As Integer, b As Integer, sum As Integer, pos As Integer
Dim idCode As String, result As String
Const xs = "0709100508040201060307091005080402"    '存储前 17 位每位系数
Const checkCodeStr = "10X98765432"    '存储余数对应的检验值
①________
sum = 0
For i = 1 To 17 Step 1
a = Val(Mid(idCode, i, 1))
b = ②________
sum = sum + a * b
Next i
pos =
checkCode = Mid(checkCodeStr, pos, 1)
If checkCode = Mid(idCode, 18, 1) Then
result = "有效"
Else
result = "无效"
End if
List1.AddItem (idCode & "    " & result)
End Sub
(3)程序中加框处代码有误,应修改为________。

同类题4

过桥问题。n个旅行者在夜晚要通过一座狭窄的桥,桥上最多只能上2个人且必须借助手电筒,手电筒只有一只。为了使所有人在最短时间内过桥,设计算法如下:
(Ⅰ)如果只有1人过桥,时间为个人过桥时间。
(Ⅱ)如果有2人一起过桥,时间以慢的人为准。
(Ⅲ)如果有3个人a、b、c,时Ta<Tb<Tc,过桥方案为让a和b起过桥,a拿手电筒回来,然后与c一起过桥。
(Ⅳ)如果存在多于3个人过桥,如a、b、…y、z需要过桥,耗时Ta<Tb<…<Ty<Tx,这时有两种可选方案,选择其中用时少的,直至剩余人数少于4人。
①最快的1个将最慢的2个分别送过桥。
a拿手电筒与z过桥,然后a拿手电筒回来与y一起过桥,a再拿手电筒回来与b一起过桥。
②最快的2个先将最慢的2个送过桥。
让a、b拿手电筒先过桥,a拿手电筒回来,让y、z拿手电筒过桥,然后b拿手电筒回来与a一起过桥。
为验证方案,小明设计了相应的VB程序。首先从数据库中获取每个人的过桥时间,并显示在列表框List1中,单击“计算”按钮 Command1,在文本框Text1中输入最短耗时,界面如下图所示。
 
(1)VB程序代码如下,请在划线处填入合适的代码。
Dim n As Integer   ‘存放过河人数
Dim t (1 To 100) As Integer ‘存放每个人单独过桥时间
Private Sub Form _ load()

‘从数据库中读取每个人的过桥时间,显示在列表框List1中,并统计总人数n,代码略

End Sub
Private Sub Command1_Click()

Dim i As Integer, k As Integer, j As Integer, temp As Integer

Dim sum1 As Integer, sum2 As Integer, tsum As Integer

sum1 = 0:sum2 = 0:tsum=0

For i = 1 To n – 1 ‘对每个人的过桥耗时进行升序排序

   k = i

   For j = i + 1 To n

If ______ Then k = j

   Next j

If k <> i Then
temp t(i):t(i) = t(k):t(k) = temp
End if
Next i
i=n
do while i>3
sum1=2*t(1)+t(i-1)+t(i) ‘方案①
sum2=t(1)+2*t(2)+t(i)   ‘方案②
if sum1<sum2 then
tsum=tsum+sum2
end if
i=_____
Loop
If n = 1 Then ‘剩下1个人
tsum = tsum + t(1)
ElseIf n = 2 Then ‘剩下2个人
tsum = tsum + t(2)
Else ‘剩下3个人
tsum = _____
End If
Text1. Text = Srt(tsum)
End Sub
(2)如有5个人,他们单独过桥耗时(单位:s)如下图所示,则程序运行后文本框Text2中显示的最短耗时:_________(s)。