试题

试题 试卷

logo

题型:综合题 题类:常考题 难易度:困难

浙江省嘉兴市第一中学2017-2018学年高二下学期信息技术期中考试试卷

【加试题】最大回文子串。回文字符串是具有回文特性的字符串:即该字符串从左向右读, 与从右向左读都一样。如:凤落梧桐梧落凤,abcba 等。“最大回文子串”是指一个字符串中长度最大的回文字符串,其基本算法思想如下:

⑴每个回文都有一个“中心”,当回文字符数为奇数时,中间的那个字符就是回文中心;但是当回文的字符数为偶数时,回文的中心是最中间的那两个字符,且这两个字符相同。

⑵对任意一个字符或者相同的两个连续字符,我们都可以假设它为回文的“中心”,向它的左右两边扩展出尽可能长的回文。对于每种假设,我们都能得到一个回文,而最长回文必定由其中的某个假设中得到!

现编写一个VB程序,在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

举一反三
小丽在假期看到小朋友们在玩一个游戏,8个小朋友围成一圈,从某个小朋友开始报数,报到指定数时,该小朋友出圈,接着从出圈的位置开始再接着报。她希望通过VB程序模拟这个过程,思路如下:

1)用一个一维数组来模拟,编号1~N保存在数据a(1)~a(n)中,来代表N个小朋友。

2)K代表报数的起始位置,从数组的a(k)开始遍列,报到m出圈,将当前位置的元素删除,后面的元素依次往前移位。总数减1。

3)当报数报到数组元素的最后一个时,返回数组开头接着报数。

4)当总数只剩下一个数时,直接输出。

界面如下:

Private Sub Command1_Click(   )

Dim i As Integer

Dim n As Integer

Dim m As Integer, k As Integer

Dim A(1 To 50) As Integer   '存放编号的数组

n = Val(Text1.Text)                       '编号个数

k = Val(Text2.Text)                '报数起始位

m = Val(Text3.Text)                   '报到出圈数

If n > 0 And k > 0 And m > 0    ①   n <= 50 Then

    For i = 1 To n              '初始化编号a(1)=1,a(2)=2,……

         A(i) = i

    Next i

    Label1.Caption =     ②          '调用出圈函数,得到返回的出圈顺序

Else

    MsgBox "编号、起始位、报到出圈数都必须大于0!编号不能超过50!"

End If

End Sub

Private Function chuquan(b() As Integer, n As Integer, m As Integer, k As Integer) As String

Dim i As Integer, j As Integer

Dim s As String                  '出圈顺序存放

i = k - 1

s = "出圈顺序为:"

Do While n > 1

       i = i + 1

       m = m - 1

       If     ③  Then

         s = s + Str(b(i)) + ","

         For j = i To n - 1

            b(j) = b(j + 1)

         Next j

         b(j) = 0

         n = n - 1

         i = i - 1

         m = 4

      End If

      If i = n  Then  i = 0

Loop

chuquan =        ④    

End Function

① {#blank#}1{#/blank#}

② {#blank#}2{#/blank#}

③ {#blank#}3{#/blank#}

④ {#blank#}4{#/blank#}

返回首页

试题篮