当前位置: 高中信息技术 / 综合题
  • 1. (2023高三下·浙江开学考) 小林发现他的鱼缸里的观赏鱼越来越少了。仔细观察才发现,即使按时喂鱼,一些大鱼也会争着吃小鱼——但是不会吃比它小太多的鱼。准确地讲,若一条大小是ai的鱼,当存在另外一条鱼aj个头严格比它小,但个头差不超过整数k时(即ai−aj≤k),ai会吃掉aj——吃掉后,ai不会变大,aj会消失。

    如:当鱼的大小是a=[101,53,42,102,101,55,54]且k=1时,一种可能的掠食过程是(下划线表示被吃):[101,53,42,102,101,55,54]→[101,53,42,102,55,54]→[101,42,102,55,54]→[42,102,55,54]→[42,102,55],最后只剩下3条鱼。小林想用Python程序模拟研究一下,对于给定的鱼大小和k的值,最坏情况下会剩几条鱼。

    1. (1) 若a=[20, 15, 10, 15, 31, 20, 25], k=5,则最坏情况下会剩条鱼。
    2. (2) 研究前,小林先对a中所有数据进行升序排序,请完成下面的程序。

      a = [101, 53, 42, 102, 101, 55, 54]

      k = int(input())   # k的含义如题所述

      last = len(a) - 1

      flag = True

      while last > 0 and flag:

          flag = False

          for j in range( ):

              if a[j] > a[j+1]:

                  a[j], a[j+1] = a[j+1], a[j]

                  last = j

                  flag = True

    3. (3) 以下程序从最小的鱼儿开始模拟让较大的鱼吃较小的鱼,无法吃掉的鱼保存在st变量中,结束后输出st中剩余的元素个数就是最坏情况下所剩鱼的数量。请完善算法。

      n = len(a)

      st = [None] * n

      top = -1

      for i in range(n):

          while top >= 0 and st[top] < a[i] and a[i] - st[top] <= k:

              top -= 1

          top += 1

         

      print("最坏情况下会剩下%d 条鱼" % (top+1))

    4. (4) 对于剩下的鱼中,是否还存在某种大小的鱼儿。输入鱼的大小,查询该尺寸的鱼儿是否还存在。请完善以下算法。

      size = int(input())      #输入要查询的鱼的尺寸

      i = 0

      j = top

      while i <= j:

          m = (i+j) // 2

          if    # 若size值与第m号元素相等,则结束循环,此处关系表达式略

              break

          elif  :

              i = m + 1

          else:

              j = m - 1

      if  :

          print("大小为%d 的鱼还在!" % size)

      else:

          print("大小为%d 的鱼不存在,可能已经被吃了" % size)

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