当前位置: 高中信息技术 / 综合题
  • 1. (2023高二下·宁波期中) 小强学习过大数据的“分治”思想后,对经“分治”处理后的数据合并产生了兴趣。他设计了一个算法,对两个升序列表a、b中的数据(均为正整数)进行合并,合并后的数据仍保持升序。

    1. (1) 为了生成长度为num 的升序列表x,小强写了如下代码。

      import random

      def mk(num) :

      x= [0]*num  #创建列表 x= [0,0,……,0],其中 0 的个数是 num

      x[0]=random.randint(5,10)  #randint(a,b)返回[a,b]区间内的一个随机整数

      for i in range(1,num) :

      return x

      m=n=5

      a=mk(m)

      b=mk(n)

      print("原始数据序列 a 为:",a)

      print("原始数据序列 b 为:",b)

      ①使用语句 a= mk(5)调用函数,加框处语句的执行次数是 (填写阿拉伯数字) 。

      ②执行上述代码后,关于输出的列表a、b 中的数据,下列说法正确的是 (单选,填字母: A .相同 / B .不相同 / C .可能相同)

    2. (2) 为了描述方便,假设两个列表中的元素个数m=n=5,其初始状态如下:

      b[0]

      b[1]

      b[2]

      b[3]

      b[4]

      10

      11

      15

      16

      17

      为了使合并后的数据保存在列表a 中,现对列表 a 扩充 n 个元素“-1”,扩充后状态如下:

      a[0]

      a[1]

      a[2]

      a[3]

      a[4]

      a[5]

      a[6]

      a[7]

      a[8]

      a[9]

      7

      9

      10

      14

      19

      -1

      -1

      -1

      -1

      -1

      变量i赋值为0,指向列表b的首数据,变量p赋值为0,指向列表a的首数据,变量tot指向列表a的最后一个有效数据(如图所示) 。

      合并的具体算法如下:

      Ⅰ.如果 a [p]= – 1 ,则直接将 b[i]存储到 a [p]中,同时 tot 值增加 1;

      Ⅱ.如果 a [p]>b[i] ,则整体将 a [p] ,… ,a [tot]向右移动一个位置,然后将 b[i]存储到空出的位置, 同时 tot 值增加 1。

      Ⅲ. p 值增加 1;

      小强编写的合并代码如下,请在划线处填入合适代码。

      #将列表a 的数据个数存入m,列表b 的数据个数存入 n,代码略

      #对列表 a 扩充 n 个-1,代码略

      p=0

      tot=

      i=0

      while  :           #将列表b 中元素 b[i]逐个插入到列表 a 中

      if a[p]==-1 :

      a[p]=b[i]

      tot+=1

      i+=1

      elif a[p]>b[i] :

      for j in range(tot,p-1,-1): #整体将 a[p], … ,a[tot]向右移动一个位置

      a[j+1]=a[j]

      tot+=1

      i+=1

      p+=1

      print("合并后的数据序列为:",a)

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