当前位置: 高中信息技术 / 综合题
  • 1. (2023·浙江模拟) 某工厂将送达的各批次物品按品种打包。小李将各批次物品信息按送达时间顺序合并,得到如图 a-2 所示数据 data。同一个包裹只能装入同一品种任意批次的物品,当某一个品种物品 A 送达使得已送达的该品种物品总重量超过 m 时,则将在该物品之前送达的物品按重量由大到小依次 装入包裹,其余重量不足 m 的品种,按各品种依次装入包裹。编写程序,读取物品合并更新后的信 息,按送达时间顺序打包,输出各包裹中的物品序号,运行结果如图 b 所示。

    请回答下列问题:

    1. (1) 送达物品信息合并后如图 a-2 所示,若包裹装入物品重量不能超过 8 千克,则首先打包 完成的包裹中装入品种为 0,各物品的序号依次是
    2. (2) 定义 data_sort(lst)函数。先将数据(如图 a-1 中所示)合并得到 lst 列表(如图 a-1 中所示),函数 data_sort(lst)的功能是对 lst 列表按送达时间升序排列,并对序号进行更新。

      def data_sort(lst):

          for i in range(n- 1):

              for j in range(n- 1,i,- 1):

                  if lst [j][2]< lst [j- 1][2]:

                      lst [j], lst [j- 1]= lst [j- 1], lst [j]

              lst[i][0]=i+1

          return lst

      执行上述代码后, (填写:能/不能)正确得到如图 a-2 中的数据。

    3. (3) 实现上述功能的部分Python程序如下,请在划线处填入合适的代码。

      def pack(k):      #对品种 k已送达待打包的物品按重量由大到小输出

          #部分代码略

          p=b[k][1]

          num+= 1

          print("第"+str(num)+"个包裹中品种为"+str(k)+" ,各物品的序号依次是:",end=" ")

           while p!=- 1:

              print(data[p][0],end=",")

              p=x[p]

          print()

      '''

      合并后排序得到 n 件物品的数据存储在数组 data 中并输出,包裹最大承受最大重量为 m 千克。 物品品种的数量是 sn ,代码略

      '''

      b=[[0,- 1] for i in range(sn)]

      x=[- 1 for i in range(n)]

      num=0

      for i in range(n):

          k=data[i][1]

          if b[k][0]+data[i][4]>m :

              pack(k)

              b[k]=[0,- 1]

          p=

          if p==- 1:

              b[k][1]=i

          else:

              if data[i][4]>data[p][4]:

                  b[k][1]=i

                 

          else:

              q=- 1

              while   :

                  q=p

                  p=x[p]

              x[q]=i

              x[i]=p

          b[k][0]+=data[i][4]

      #重量不足 m 的品种,按各品种依次装入包裹

      for i in range(sn):

          if b[i][1]!=- 1:

              pack(i)

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