当前位置: 高中信息技术 / 综合题
  • 1. (2023·杭州模拟) 为分析数据中各元素的变化情况,进行如下定义:若在数组d中满足d[a]<...<d[i-1]<d[i]>d[i+1]>...>d[b],则从下标a到下标b区间的数据称为一个波峰,下标a到b的距离即为一个波峰的长度(长度≥3)。例如:数组d元素为“78,46,50,37,5,42,6,6,23”,存在2个波峰,分别是从d[1]到d[4]和d[4]到d[6],波峰长度分别为4和3。

    编写程序分析数据,找出所有波峰,按波峰长度降序排序(若波峰长度相同,则按开始下标升序),并输出波峰长度和开始到结束元素下标;若不存在,则输出“不存在波峰”,运行结果如图所示。

    请回答下列问题:

    1. (1) 根据题意,若数组d元素“23,14,35,31,13,20,3,40,10,10,9”,则最长的波峰长度为
    2. (2) 执行该程序,若数组d元素为“2,1,1,2”,则A处while语句中循环体的执行次数是
    3. (3) 实现上述功能的程序代码如下,请在划线处填入合适的代码。

      #读取待处理数据,保存在数组 d 中,并显示输出,代码略

      mt,i,n=[],1,len(d)

      while i<n:

          while i<n and d[i]<=d[i-1]:    #A

              i+=1

          st=i-1

          while i<n and d[i]>d[i-1]:

              i+=1

          if:

              continue    #跳出本轮循环,然后继续进行下一轮循环

          while i<n and d[i]<d[i-1]:

              i+=1

          ln=i-st

          if len(mt)==0:

              mt.append([ln,st,-1])    #为 mt 追加一个列表元素

              head=0;q=head

          else:

             

              while p!=-1 and :

                  q=p

                  p=mt[p][2]

              if p==head:

                  mt.append([ln,st,head])

                  head=len(mt)-1

              else:

                  mt.append([ln,st,p])

                 

      if len(mt)==0:

          print("不存在波峰")

      else:

          print("输出结果(长度:开始下标~结束下标):")

          p=head

          while p!=-1:

              print(mt[p][0],":",mt[p][1]," ~",mt[p][0]+mt[p][1]-1)

              p=mt[p][2]

    4. (4) 使用以下代码替换加框处代码,可以减少链表mt遍历次数的是       (单选,填字母)。
      A . if mt[q][0]>ln:

          p=mt[q][2]

      else:

          p=head

      B . if mt[q][0]<ln:

          p =mt[q][2]

      else:

          p=head

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