充值活动已开启,快来参与吧 关闭充值活动
当前位置: 高中信息技术 /
  • 1. 某项活动有n个单位(编号1到n)参加,需将员工分成若干个小组,每个小组的人数上限为m,小组编号按新建次序从1开始编号。分组时,首先按单位编号次序依次在各单位内部分分组,每m人分配到一个新建小组中,不足m人的剩余员工暂不分配;然后按剩余员工人数由大到小的顺序,依次为各单位剩余员工分配小组。

    若某单位剩余员工人数为k,则分配方法为:在已建的小组中查找空位数(该小组还可容纳的人数)大于或等于k的小组,如果找到的小组有多个,则选择空位数最少的小组,将此k人分配到该小组中;如果没有找到,则新建一个小组,将此k人分配到该小组中。

    设n为5,m为20,各单位员工人数及单位内部的分组过程如图a所示,各单位剩余员工的分组过程如图b所示。

    编写程序:给定各单位编号及员工人数,根据上述方法进行分组处理,按单位编号次序输出各单位所分配的分组编号。请回答下列问题:

    1. (1) 由题意可知,若仅将图a中1号单位的员工人数修改为25,然后对图中5个单位重新分组,则1号单位所分配的分组编号为
    2. (2) 定义如下bubble_sort(lst)函数,参数lst的每个元素由单位编号和剩余员工人数2个数据项组成。函数的功能是根据每个单位的剩余员工人数,对lst进行降序排序。

      def bubble_sort(lst):

          n=len(lst)

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

             

          return

      调用该函数,若 lst 为[[1,0],[2,0],[3,18],[4,0],[5,19],[6,17]],请回答①和②两个问题。

      ①虚线框中的程序段第 1 次执行后,关于 lst 中的剩余员工人数,下列说法正确的是(单选,填字母)。

      A.lst[0][1]数值最小 B.lst[0][1]数值最大

      C.lst[5][1]数值最小 D.lst[5][1]数值最大

      ②虚线框中的程序段执行的次数为

    3. (3) 实现分组功能的部分 Python 程序如下,程序中用到的列表函数与方法如图 c 所示,请在程序中划线处填入合适的代码。

      函数与方法

      功能

      w.append(x)

      在列表 w 末尾添加元素 x

      x.w.pop()

      将列表 w 末尾元素赋值给 x,并将其从 w 中删除

      def group(data, m):

          n=len(data)

          a=[]

          for i in range(n+1):

              a.append([])       # a[i]初始化为空列表,存放编号为 i 的单位所分配的分组编号

          gnum=0

          for i in range(n): #各单位内部分组

              while data[i][1]>=m:

                  gnum+=1

                  k=data[i][0]

                  a[k].append(gnum)

                 

          bubble_sort(data) #根据每个单位的剩余员工人数,对 data 进行降序排序

          b=[]

          for i in range(m):

              b.append([])

          i=0       #对剩余员工分组

          while i<n and data[i][1]!=0:

             

              while j<m and len(b[j])==0:

                  j+=1

              if j<m:

                  v=b[j].pop()

              else:

                  gnum+=1

                  v=gnum

              a[data[i][0]].append(v)

             

              i+=1

          #输出各单位的分组编号,代码略

      '''

      读取小组人数上限存入 m;读取 1 至 n 号单位的数据,依次存入列表 data 的 data[0]至 data[n-1]中。

      Data[i]包含 2 个数据项,data[i][0],data[i][1]分别存放单位编号及员工人数,代码略

      '''

      group(lst, m)