当前位置: 高中信息技术 / 综合题
  • 1. (2019高三上·台州月考) 给定一个数组(有n个元素),小李通过边分段、边合并的方式将n个数据处理成一个非降序数据段(a(1)≤a(2)≤a(3)≤……≤a(n)),每一轮数据处理方法如下:

    ⑴查找相邻两个非降序数据段在未处理的数据区域中,从前往后找出第一个最长非降序数据段。若该数据段后而没有元素,则本轮处理完毕;否则在第1个数据段的后面,从前往后找出数组中第二个最长非降序数据段。

    ⑵合并两个数据段

    借助数组tmp,将查找到的两个相邻数据段合并成一个非降序数据段,然后将合并后的数据依次存回到原数组中。

    ⑶若数组中还有未处理的数据,则重复⑴⑵步骤。

    每一轮数据处理完毕后,重新从数组第1个数据开始进行下一轮处理。若检测到某一轮没有合并处理,则说明n个数据己构成非降序数据段,数据处理结束。

    1. (1) 根据上述描述,若数组各元素为“3,9,7,6,8,2,1,5,7,4”,则第一轮合并处理完成后,数组中的数据依次是: (用“,”间隔)。
    2. (2) 实现上述功能的VB程序如下,请在划线处填入合适代码。

      Const n As Integer = 10

      Dim a(1 To n+5) As Integer

      Dim tmp(1 To n + 5) As Integer

      Private Sub Form_Load())

      ‘读取n个整数保存到数组a中,并在文本框Textl中显示,代码略。

      End Sub

      Function Position(low As Integer) As Integer

          Dim i As Integer

          For i=low To n-1

              If   ①     Then Exit For

          Next i

          Position=i

      End Function

      Then Exit For

      Function Merge() As Boolean

          Dim i As Integer, flag As Boolean, p1 As Integer, p2 As Integer

          Dim low1 As Integer, high1 As Integer, high2 As Integer

          flag=False:low1=1

          Do While lowl1<n

              High1=Position(low1)

              If high1=n Then Exit Do Else flag=True

              high2=Position(high1+1)

              p1=low1:p2=high1+1

              i=low1

              Do While   ② 

                  If p2>high2 Or p1<=high1 And a(p1)<a(p2) Then

                      tmp(i)=a(p1):p1=p1+1

                  Else

                      tmp(i)=a(p2):p2=p2+1

                  End If

                  i=i+1

              Loop

              For i=low1 To high2

                  a(i)=tmp(i)

              Nexti

                 ③  

          Loop

          Merge=flag

      End Function

      Private Sub Command1_Click()

          Do While True

              If Not Merge() Then Exit Do

              ‘’在列表框List1中输出这一轮合并后的数据,代码略。

          Loop

      End Sub

       ② ③ 

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