当前位置: 高中信息技术 / 综合题
  • 1. 给定一个序列a,这个序列由n个数组成(n个数依次保存在数组a(1)~a(n)中),现在给定一个整数p,要求将序列a的前p个数与后n-p个数对调,且不改变这p个数(和n-p个数)之间的相对位置。例如长度为5的序列1,2,3,4,5,当p=2时重排的结果为3,4,5,1,2。

    我们可以用两种不同的方法来实现这一目的:

    方法一:逐个地将数组a的后n-p个数依次移动到前面去。

    数组 a:

    1

    2

    3

    4

    5

    3

    1

    2

    4

    5

    3

    4

    1

    2

    5

    3

    4

    5

    1

    2

    方法二:将前p个数看作一个区间,后n-p个数看作另一个区间,依次将数交换,同时缩小区间的大小;若某一个区间达到末尾,则调整区间的范围,直到两个区间刚好同时达到末尾,即调整结束。

    数组a:

    互换并调整区间:第一个区间结束且第二个区间还有元素,调整区间 1 和区间 2 的范围,如图将区间 1 调整为[3,4],区间 2 调整为[5:5]。

    互换并调整区间:第二个区间结束且第一个区间还有元素,仅调整第 1 个区间的起始位置。

    互换并结束:两个区间同时到达末尾。

    3

    4

    5

    1

    2

    小明依据上面的方法设计了VB程序如下:

    Dim a(1 To 100), i As Integer, j As Integer, tmp As Integer, p As Integer

    Dim start1 As Integer, end1 As Integer, start2 As Integer, end2 As Integer   '将序列保存到数组a中,序列长度保存到n中,移动数字的个数保存在p中

    Private Sub Command2_Click()       '用方法一实现

        For i = p + 1 To n

            tmp = a(i)

            For j = i To  ①   Step -1

                a(j) = a(j - 1)

            Next j

               ②   = tmp

        Next i

    End Sub

    Private Sub Command3_Click()      '用方法二实现

        start1 = 1: end1 = p      '第1个区间的起始状态

        start2 = p + 1: end2 = n      '第2个区间的起始状态

        i = start1: j = start2

        Do While   ③  

            i = start1: j = start2

            Do While i <= end1 And j <= end2

                tmp = a(i): a(i) = a(j): a(j) = tmp

                i = i + 1:j = j + 1

            Loop

            If i <= end1 Then     '第2个区间结束且第1个区间还有元素

                start1 = i

            ElseIf j <= end2 Then   '第1个区间结束且第2个区间还有元素

                start1 = i:   ④  

                start2 = j

            End If

        Loop

    End Sub

    请回答下列问题:

    1. (1) 若序列为:9,8,13,22,7,6,5,37,6,p=4 时,使用方法一,则a(3)的值依次是13,(用逗号隔开,顺序填写曾存储过的值)。
    2. (2) 请在划线处填入合适的代码。

       ② ③ ④ 

微信扫码预览、分享更方便