综合核心素养测评卷(一) (原卷版+解析版)2025-2026学年浙江省高三信息技术一轮复习选择性必修一

资源下载
  1. 二一教育资源

综合核心素养测评卷(一) (原卷版+解析版)2025-2026学年浙江省高三信息技术一轮复习选择性必修一

资源简介

综合核心素养测评卷(一)
一、 选择题(本大题共12小题,每小题列出的四个备选项中只有一个是符合题目要求的)
1. 序列“1,2,3,2,1”依次放入某种数据结构后又从该数据结构中取出。若放入和取出规则均符合栈或队列的规则,那么当取出序列为下列哪个时,无法确定该数据结构是栈还是队列( B )
A. 2,1,3,1,2 B. 1,2,3,2,1
C. 1,2,1,2,3 D. 1,2,3,1,2
【解析】 本题考查栈、队列的基本特点。由栈和队列的操作特点知,序列出栈顺序和入栈顺序可以一样也可以不一样,而序列入队和出队顺序必然是一样的。由此可以判定A、C、D必然是出栈序列,该数据结构肯定是栈结构,均不符合题意。而B取出顺序和输入顺序完全一致,无法确定是栈还是队列结构,符合题意。
2. 某二叉树的树形结构如图所示,后序遍历结果为“WUSVTR”,则该二叉树的前序遍历结果为( D )
A. RSTUVW B. RTSVUW
C. RTSUWV D. RSUWTV
【解析】 本题考查二叉树。结合后序遍历可画出树形结构,所以前序遍历的结果为RSUWTV。D正确。
3. 用Python列表模拟队列,并设置队头指针head指向队首元素,队尾指针tail指向队尾元素的下一个位置,判断一个长度为n的循环队列为空的条件是( C )
A. head ,tail=0,1 B. head!=tail
C. head==tail D. head=(tail+1)%n
【解析】 循环队列队满的特征为head=(tail+1)%n;无论是普通队列还是循环队列,当head值与tail值相等时,均表示队列为空。C正确。
4. 有如下Python程序段:
a=["123","456","789"]
s1="31,12,23,33"
s2="";i=0
while i  ch=s1[i]
  if ch != ",":
    i+=1
    p=int(s1[i])
    s2=a[p-1][int(ch)-1]+s2
  i+=1
执行该程序段后,变量s2的值是( A )
A. "9843" B. "34"
C. "3489" D. "43"
【解析】 本题考查字符串处理和列表与字符串的访问。观察列表a和字符串s1可以发现,列表a的长度与列表a中元素的长度均为3,字符串s1中的数字字符均小于等于3,且两两被逗号分隔,可推测本程序是通过s1来访问列表a中的某一字符。观察第一次循环,ch取出s1第一个字符“3”,if判断条件成立,p为s1的第二个字符对应的数字1,s2倒序累加列表a中第p=1个字符串中的第int(ch)=3个字符,i在这过程中加2;观察第二轮循环,if判断条件不成立,i的值加1,s2没有变化。由此可知,字符串s1中每两个数字字符为一组,分别为待取元素所在列表位置和所在字符串位置。取出字符依次为"3"、"4"、"8"、"9"。由于是倒序累加,程序运行结束后,变量s2的值是"9843"。A正确。
5. 已排序的列表a有n个整型元素,现要删除a中重复出现的元素,使每个元素只出现一次,并输出去重后的结果。实现该功能的程序段如下:
p, q = 0, 1
while  (1) :
  if a[p] != a[q]:
     (2) 
    p += 1
  q += 1
print(  (3)  )
上述程序段中,方框处的可选代码如下:
①q < len(a) ②p < len(a) ③a[p + 1] = a[q] ④a[p] = a[q] ⑤a[: p]
⑥a[: p +1] 
则方框处的代码依次为( A )
A. ①③⑥ B. ①④⑤
C. ②③⑤ D. ②④⑥
【解析】 本题考查数组的相关知识。数组去重,利用模拟法,设数组a为[1,3,3,3,4,6],如表所示,可推得当a[p]!=a[q]的时候,利用数组的移动实现去重的效果,而④a[p]=a[q]会覆盖掉不重复数值,所以确定③;变量q在if语句外,表示利用q去遍历数组,可确定while条件为①,A正确。
结束状态 p q
有序列表a a[0] a[1] a[2] a[3] a[4] a[5]
数值 1 3 3 3 4 6
循环结束后 1 3 4 6
6. 有如下Python程序段:
a="Python"; q=[0]*6
head,tail=0,0
i=len(a)-1
while i>=0:
  if i%3!=0:
    q[tail]=a[i]
  else:
    q[tail]=q[head]
    head+=1
  tail+=1
  i-=1
print(q[head:tail])
当执行该程序段后,输出的结果是( A )
A. [ n , t , y , o ] B. [ n , t , y ]
C. [ n , o , n , t , y ] D. [ n , o , n , t , y , o ]
【解析】 本题考查队列。根据题意可知,当索引i为3的倍数时,队首元素出队并入队尾,否则a[i]入队。即[ n ]→[ n , o ]→[ o , n ]→[ o , n , t ]→[ o , n , t , y ]→[ n , t , y , o ],A正确。
7. 有如下Python程序段:
import random
a=[0]*6
for i in range(6):
  a[i]=random.randint(1,5)*2+1
i=0
while i<5:
  if a[i]>a[i+1]:
    a[i],a[i+1]=a[i+1],a[i]
  else:
    a[i]+=1
  i+=1
print(a)
以上程序段运行后,列表a的值可能是( C )
A. [2,5,10,10,10,9] B. [3,8,7,13,3,9]
C. [8, 12, 3, 5, 3, 11] D. [6,10,9,7,10,8]
【解析】 本题考查程序代码的理解,涉及的知识点有随机函数、列表、数据交换、循环结构等。列表a的各元素的初值范围为[3,5,7,9,11],循环遍历,若当前数大于后数,则交换,若前数不大于后数,则当前数+1。所以程序执行后,若该数还是3,5,7,9,11,则该数是与后数交换所得,若该数为4,6,8,10,12,则该数的原数大于后数,加1所得。所以不可能出现2,13,A、B错误。第三个数字不可能是9,D错误。选项C的原始数可能为[7,11,11,3,5,3],运行代码后可得知,C正确。
8. 有如下Python程序段,实现对有10个元素的列表a从小到大的排序。
i=0
while i<9:
  for j in range(9,i,-1):
    if a[j]      a[j],a[j-1]=a[j-1],a[j]
           
则画线处的代码是( D )
A. i=1 B. i=j+1
C. i=j-1 D. i=j
【解析】 本题考查冒泡排序变形。结合程序可知每一轮for循环实现最小数上冒,循环完成后,要实现除该数外的最小数上冒,while循环的步长应为1,即i=i+1。又因为当for循环结束时,j的值为i+1,故划线处代码是i=j,D正确。
9. 有如下Python程序段:
def f(n):
  if n < 2:
    return 0
  elif n % 2 ==0:
    return n+f(n-2)
  else:
    return f(n-1)
n=int(input())
print(f(n))
若输入n的值为101,则程序运行后,输出的内容为( C )
A. 100 B. 2500
C. 2550 D. 5050
【解析】 本题考查递归算法的概念及应用。从代码可知:f(100)=100+f(98),f(98)=98+f(96),f(96)=96+f(94),依此类推,最终可得:f(100)=100+98+96+94+…+2=2550,C正确。
10. 有如下Python程序段:
import random
d = [0] * 6
for i in range(6):
  d[i] = random.randint(1,10)
i = 0
j = len(d)- 1
while i < j:
  if d[i] % 2 == 0 and d[j] % 2 ==1:
    d[i], d[j] = d[j], d[i]
  elif d[i] % 2 == 1:
    i = i + 1
  elif d[j] % 2 == 0:
    j = j - 1
print(d)
执行该程序段后,下列输出结果中,不可能的是( B )
A. [1, 3, 1, 5, 1, 7] B. [1, 4, 3, 6, 5, 8]
C. [1, 3, 5, 7, 9, 10] D. [6, 4, 2, 8, 2, 10]
【解析】 本题考查random模块和自定义排序。d是有6个元素的列表,每个元素可能为[1,10]中的一个整数。观察while循环的循环体可知,每次循环对左右边界进行奇偶判断,若左边界为偶数、右边界为奇数,则交换两数的位置;若左边界为奇数,则左边界右移一位;若右边界为偶数,则右边界左移一位。由此可知,循环的结果为列表按先奇数后偶数排序,B符合题意。
11. 某二分查找算法的Python程序段如下:
import random
key=random.randint(0,4)*2+5
a=[4,5,5,8,9,11,11,13,15,17]
n=10;ans=0;i=0;j=n-1
while i<=j:
  m=(i+j)//2
  if a[m]<=key:
    i=m+1
  else:
    j=m-1
  ans+=a[m]
print(ans)
执行该程序段后,ans的值不可能是( A )
A. 19 B. 27
C. 37 D. 44
【解析】 本题考查二分查找。key的值有五种可能5,7,9,11,13。画出二分查找树,如图所示。注意找到后不退出,遇到相同的会往右找。ans记录的是路径中所有数的和。当key=5,ans为9+5+5+8=27。当key=7,ans为9+5+5+8=27。当key=9,ans为9+13+11=33。当key=11,ans为9+13+11+11=44。当key=13,ans为9+13+15=37。A符合题意。
12. 现用链表d存储了一批会员信息,链表每个节点中的数据依次为会员名、手机号、会员积分和节点指针,数据存储形式如[[“张三”,“13282825678”,280,1],[“小明”,“13256787678”,500,3],…]。现要实现删除某个手机号的会员节点,已知链表头指针head与要删除会员的手机号,实现删除节点的代码如下:
  p=head
  q=p
  while p!=-1:
    if d[p][1]==phone:
      if p==head:
          (1)  
      else:
           (2)   
    q=p
       (3)   
画线处的代码由以下代码组成:
①head=d[p][3] ②p=d[p][3] ③d[p][3]=d[q][3] ④d[q][3]=d[p][3]
则画线处代码依次为( C )
A. ①③② B. ②④① 
C. ①④② D. ③④②
【解析】 本题考查链表元素的删除操作知识。该程序的算法思想为:遍历链表,查找待删除节点,找到后根据该节点为第一个节点或中间节点执行不同的删除操作。C正确。
二、 非选择题(本大题共3小题)
13. 某物流公司受委托对客户下单的大件货品进行打包发货。现有三种货品A、B、C,每件货品的打包时间均为半小时。从中午12:00开始,每隔1小时接收一次订单,并非每次都有新订单产生。公司安排的打包工作时间为12:00—18:00,假设当日订单在工作时间内就能完成。公司有甲、乙、丙三位师傅对货品进行打包,货品按照甲、乙、丙的顺序分配给各师傅处理,每位师傅一次打包一件货品。打包规则如下:若下单时间相同,优先级越高(数字越小,优先级越高)的货品,先全部打包完成;若不同,则下单时间更早的货品先处理完成。
订单输入格式示例:7A2B、4B10A(说明:4B10A指订单中有4件B类货品,10件A类货品)。请编写程序,输出某天下午甲、乙、丙的货品打包顺序和打包报酬,如甲的输出结果:3A5B1C,200元。
表1
货品 优先级 打包报酬(元/件)
A 1 30
B 2 20
C 3 10
  表2
下单时间 货品及数量
12:00 2B7A
14:00 7B
15:00 6B5C
请回答下列问题:
(1)若某天货品下单信息如表2所示,则甲的打包顺序为3A5B1C,乙的打包报酬为 180 元。
(2)定义如下的convert(data)函数:参数data为一个订单,包括货品和数量,函数的功能是将订单转换成货品名称序列,如订单2B1A1C转换成ABBC。请在画线处填入合适的代码。
def convert(data):
  num,q = 0, " "
  qsort = [" ", " ", " "]
  for i in range(len(data)):
    if data[i] >= "0" and data[i] <= "9":
      num =  num*10+int(data[i]) 
    else:
      for j in range(num):
        q += data[i]
      qsort [ord(data[i])-ord("A")] = q
      num, q = 0, " " 
  s = qsort [0]+qsort [1]+qsort [2]
  return s
【解析】 本题考查数组的综合应用。(1)由题意得按照优先级分配货品给甲乙丙,如表所示:
甲 A A A B B B B B C 3A5B1C
乙 A A B B B B B C C 2A5B2C
丙 A A B B B B B C C 1A5B2C
(2)将订单转换成货品名称序列,遍历字符串,将数字字符通过累加法转换成整型数值。
14. 有n个小组(编号1至n),每个小组有m个成员,每个成员都有一个0到20之间的整数得分。现要求按下列规则计算每个小组的平衡值,并找出平衡值最大的小组。
小组成绩的计算规则如下:若小组成员中得分最高的前k(k<=m/2)人的得分都不低于s1(若有多个s1,则取最大值),且得分最低的前k人的得分都不超过s2(若有多个s2,则取最小值),则该小组的平衡值为s1-s2。例如,第1小组共有8个成员,得分依次为“5,2,7,11,8,6,5,1”,当k=3时,得分最高的前3人得分为“11,8,7”,得分最低的3人得分为“5,2,1”,因此,该小组的平衡值为7-5=2。
按上述要求,编写Python程序,功能如下:输入各小组每个成员的得分,计算并输出平衡值最大的小组编号及平衡值(如果有多个小组并列最大,那么全部输出)。
请回答下列问题:
(1)若取k=2,小组成员的得分不变,此时第一小组的平衡值是 6 。
(2)请在画线处填入合适的代码。
n=6; m=8; k=3
a=[0]*(n*m)
ans=[0]*n
#读取n个小组每个成员的得分,按组别从小到大依次存入数组a
#a[0]到a[m-1]存储第1小组m个成员的得分
#a[m]到a[2*m-1]存储第2小组m个成员的得分
#以此类推,代码略
def balance(w): #计算第w小组的平衡值
  c=[0]*21
  for i in range((w-1)*m,w*m):
    ① t=a[i] 
    c[t]+=1
  s1 = 20; t = k
  while t>0:
    if c[s1]>0:
      ② c[s1]-=1 
      t-=1
    else:
      ③ s1-=1 
  #求s2的过程代码略
  return s1-s2
maxg = -1
for i in range(1,n+1):
  ④ g=balance(i) 
  if g>maxg:
    maxg=g
    p = 0
    ans[p]=i
  elif g==maxg:
    p+=1
    ans[p]=i
for i in range(p+1):
  print("平衡值最大的小组编号为:" +str(ans[i])+",平衡值为:"+str(maxg))
【解析】 本题考查数组、自定义函数及桶计数等算法知识。(1)若取k=2,小组成员的得分不变,得分最高的前2人得分为“11”“8”,得分最低2人得分为“2”“1”,因此该小组的平衡值为8-2=6,故答案为6。(2)①c数组用于统计0到20分每个分数的人数,即c[t]+=1就是在统计人数,所以t表示的是分数,故此处答案为t=a[i]。②while t>0:的循环中,s1从20开始寻找得分最高的前k人,若c[s1]>0表示当前s1分数的人数大于0,则t-=1表示找到1人,同时c[s1]也需要更新,c[s1]-=1即s1分数的人数减少1人,故此处答案为c[s1]-=1。③若c[s1]>0表示当前s1分数的人数大于0,否则表示不存在s1分数的人,则s1分数减少,继续寻找前k人,故此处答案为s1-=1。④for i in range(1,n+1)循环每次计算一组的平衡值,循环n次计算n组,而在a数组中,a[0]到 a[m-1]存储第 1小组m个成员的得分,a[m]到 a[2*m-1]存储第2小组m个成员的得分,依次类推第w组的成员存在下标(w-1)*m,w*m,所以传入自定义函数的参数为i即可,故此处答案为g=balance(i)。
15. 有一台自助饮料机,可以提供订单预约服务。每天晚上该机器都会对第二天所有的订单进行分析,并确定该机器第二天的开放时间。每份订单由开放时间、饮料种类和规格三部分构成(时间用分钟数表示,例如,70表示1:10,饮料种类和规格用正整数表示,种类不超过k),而饮料机最多可以装载m种不同的饮料,且饮料的量足够。机器会分析所有订单的种类需求,找到某个时间段开放,满足该时间段内所有人的饮料种类需求,且在满足时间段内的人数最多的基础上开放时间最短(不在开放时间内的订单不再考虑)。例如,当第二天的订单信息依次为 [10,1,2],[20,2,3],[25,3,6],[35,2,3],[40,1,4],且m=2时,最多能满足三个人的种类需求,最短的开放时间为20~35分钟,共16分钟。
请回答下列问题:
(1)当订单依次为[3,4,1],[20,3,3],[15,4,5],[30,2,6],[35,2,2],且m=2时,最短开放时间为 16 分钟。
(2)bsort 函数实现将订单按照时间升序排列,在调试过程中发现该函数无法实现功能。在该段代码中,第 4.5 (填写行号,行号范围1~7)行代码有误。
def bsort(order): # order数组存储所有的订单
  n=len(order)
  for i in range(n-1): 
    for j in range(n-i):
      if order[j][1]>order[j+1][1]: 
        order[j],order[j+1]=order[j+1],order[j]
  return order
(3)open_time函数实现计算最短开放时间,请在画线处填入合适的代码。
def open_time(order):
  order=bsort(order)
  n=len(order)
  i=0 ; j=0 ; st=i ; en=j
  tank=[0]*(k+1); occ=0
  while i    while j0 or occ      j+=1
      tank[order[j-1][1]]+=1
      if ① tank[order[j-1][1]]==1 :
        occ+=1
    if j-i>en-st or (j-i==en-st and order[j-1][0]-order[i][0]      st=i ; en=j
    while i      tank[order[i][1]]-=1
      i+=1
      if tank[order[i-1][1]]==0:
        ② occ-=1 
        break
return order[en-1][0]-order[st][0]+1
【解析】 本题考查冒泡排序、栈等数据结构知识。(1)先对数据按开放时间进行排序,得到[3, 4, 1], [15, 4, 5], [20, 3, 3], [30, 2, 6], [35, 2, 2],m=2,因此满足条件的是后面的20~35,总共开放时间是16分钟。(2)根据冒泡排序常识可知,内循环范围应该是range(n-i-1),否则将发生下标越界的错误,所以第4行错误。将订单按照时间升序排列,所以第5行应改为if order[j][0]>order[j+1][0]。(3)①数组tank就是一个桶,利用桶的算法思想,其作用在于检查是否有某种订单号,而occ是饮料种类的数量。代码tank[order[j-1][1]]==1表明某种订单号存在,因此此时饮料种类数量occ加1。②tank[order[i-1][1]]=0表示某种订单号不存在,因此此时饮料种类数量occ必须减去1。综合核心素养测评卷(一)
一、 选择题(本大题共12小题,每小题列出的四个备选项中只有一个是符合题目要求的)
1. 序列“1,2,3,2,1”依次放入某种数据结构后又从该数据结构中取出。若放入和取出规则均符合栈或队列的规则,那么当取出序列为下列哪个时,无法确定该数据结构是栈还是队列(  )
A. 2,1,3,1,2 B. 1,2,3,2,1
C. 1,2,1,2,3 D. 1,2,3,1,2
2. 某二叉树的树形结构如图所示,后序遍历结果为“WUSVTR”,则该二叉树的前序遍历结果为(  )
A. RSTUVW B. RTSVUW
C. RTSUWV D. RSUWTV
3. 用Python列表模拟队列,并设置队头指针head指向队首元素,队尾指针tail指向队尾元素的下一个位置,判断一个长度为n的循环队列为空的条件是(  )
A. head ,tail=0,1 B. head!=tail
C. head==tail D. head=(tail+1)%n
4. 有如下Python程序段:
a=["123","456","789"]
s1="31,12,23,33"
s2="";i=0
while i  ch=s1[i]
  if ch != ",":
    i+=1
    p=int(s1[i])
    s2=a[p-1][int(ch)-1]+s2
  i+=1
执行该程序段后,变量s2的值是(  )
A. "9843" B. "34"
C. "3489" D. "43"
5. 已排序的列表a有n个整型元素,现要删除a中重复出现的元素,使每个元素只出现一次,并输出去重后的结果。实现该功能的程序段如下:
p, q = 0, 1
while  (1) :
  if a[p] != a[q]:
     (2) 
    p += 1
  q += 1
print(  (3)  )
上述程序段中,方框处的可选代码如下:
①q < len(a) ②p < len(a) ③a[p + 1] = a[q] ④a[p] = a[q] ⑤a[: p]
⑥a[: p +1] 
则方框处的代码依次为(  )
A. ①③⑥ B. ①④⑤
C. ②③⑤ D. ②④⑥
6. 有如下Python程序段:
a="Python"; q=[0]*6
head,tail=0,0
i=len(a)-1
while i>=0:
  if i%3!=0:
    q[tail]=a[i]
  else:
    q[tail]=q[head]
    head+=1
  tail+=1
  i-=1
print(q[head:tail])
当执行该程序段后,输出的结果是(  )
A. [ n , t , y , o ] B. [ n , t , y ]
C. [ n , o , n , t , y ] D. [ n , o , n , t , y , o ]
7. 有如下Python程序段:
import random
a=[0]*6
for i in range(6):
  a[i]=random.randint(1,5)*2+1
i=0
while i<5:
  if a[i]>a[i+1]:
    a[i],a[i+1]=a[i+1],a[i]
  else:
    a[i]+=1
  i+=1
print(a)
以上程序段运行后,列表a的值可能是(  )
A. [2,5,10,10,10,9] B. [3,8,7,13,3,9]
C. [8, 12, 3, 5, 3, 11] D. [6,10,9,7,10,8]
8. 有如下Python程序段,实现对有10个元素的列表a从小到大的排序。
i=0
while i<9:
  for j in range(9,i,-1):
    if a[j]      a[j],a[j-1]=a[j-1],a[j]
           
则画线处的代码是(  )
A. i=1 B. i=j+1
C. i=j-1 D. i=j
9. 有如下Python程序段:
def f(n):
  if n < 2:
    return 0
  elif n % 2 ==0:
    return n+f(n-2)
  else:
    return f(n-1)
n=int(input())
print(f(n))
若输入n的值为101,则程序运行后,输出的内容为(  )
A. 100 B. 2500
C. 2550 D. 5050
10. 有如下Python程序段:
import random
d = [0] * 6
for i in range(6):
  d[i] = random.randint(1,10)
i = 0
j = len(d)- 1
while i < j:
  if d[i] % 2 == 0 and d[j] % 2 ==1:
    d[i], d[j] = d[j], d[i]
  elif d[i] % 2 == 1:
    i = i + 1
  elif d[j] % 2 == 0:
    j = j - 1
print(d)
执行该程序段后,下列输出结果中,不可能的是(  )
A. [1, 3, 1, 5, 1, 7] B. [1, 4, 3, 6, 5, 8]
C. [1, 3, 5, 7, 9, 10] D. [6, 4, 2, 8, 2, 10]
11. 某二分查找算法的Python程序段如下:
import random
key=random.randint(0,4)*2+5
a=[4,5,5,8,9,11,11,13,15,17]
n=10;ans=0;i=0;j=n-1
while i<=j:
  m=(i+j)//2
  if a[m]<=key:
    i=m+1
  else:
    j=m-1
  ans+=a[m]
print(ans)
执行该程序段后,ans的值不可能是(  )
A. 19 B. 27
C. 37 D. 44
12. 现用链表d存储了一批会员信息,链表每个节点中的数据依次为会员名、手机号、会员积分和节点指针,数据存储形式如[[“张三”,“13282825678”,280,1],[“小明”,“13256787678”,500,3],…]。现要实现删除某个手机号的会员节点,已知链表头指针head与要删除会员的手机号,实现删除节点的代码如下:
  p=head
  q=p
  while p!=-1:
    if d[p][1]==phone:
      if p==head:
          (1)  
      else:
           (2)   
    q=p
       (3)   
画线处的代码由以下代码组成:
①head=d[p][3] ②p=d[p][3] ③d[p][3]=d[q][3] ④d[q][3]=d[p][3]
则画线处代码依次为(  )
A. ①③② B. ②④① 
C. ①④② D. ③④②
二、 非选择题(本大题共3小题)
13. 某物流公司受委托对客户下单的大件货品进行打包发货。现有三种货品A、B、C,每件货品的打包时间均为半小时。从中午12:00开始,每隔1小时接收一次订单,并非每次都有新订单产生。公司安排的打包工作时间为12:00—18:00,假设当日订单在工作时间内就能完成。公司有甲、乙、丙三位师傅对货品进行打包,货品按照甲、乙、丙的顺序分配给各师傅处理,每位师傅一次打包一件货品。打包规则如下:若下单时间相同,优先级越高(数字越小,优先级越高)的货品,先全部打包完成;若不同,则下单时间更早的货品先处理完成。
订单输入格式示例:7A2B、4B10A(说明:4B10A指订单中有4件B类货品,10件A类货品)。请编写程序,输出某天下午甲、乙、丙的货品打包顺序和打包报酬,如甲的输出结果:3A5B1C,200元。
表1
货品 优先级 打包报酬(元/件)
A 1 30
B 2 20
C 3 10
  表2
下单时间 货品及数量
12:00 2B7A
14:00 7B
15:00 6B5C
请回答下列问题:
(1)若某天货品下单信息如表2所示,则甲的打包顺序为3A5B1C,乙的打包报酬为   元。
(2)定义如下的convert(data)函数:参数data为一个订单,包括货品和数量,函数的功能是将订单转换成货品名称序列,如订单2B1A1C转换成ABBC。请在画线处填入合适的代码。
def convert(data):
  num,q = 0, " "
  qsort = [" ", " ", " "]
  for i in range(len(data)):
    if data[i] >= "0" and data[i] <= "9":
      num =    
    else:
      for j in range(num):
        q += data[i]
      qsort [ord(data[i])-ord("A")] = q
      num, q = 0, " " 
  s = qsort [0]+qsort [1]+qsort [2]
  return s
14. 有n个小组(编号1至n),每个小组有m个成员,每个成员都有一个0到20之间的整数得分。现要求按下列规则计算每个小组的平衡值,并找出平衡值最大的小组。
小组成绩的计算规则如下:若小组成员中得分最高的前k(k<=m/2)人的得分都不低于s1(若有多个s1,则取最大值),且得分最低的前k人的得分都不超过s2(若有多个s2,则取最小值),则该小组的平衡值为s1-s2。例如,第1小组共有8个成员,得分依次为“5,2,7,11,8,6,5,1”,当k=3时,得分最高的前3人得分为“11,8,7”,得分最低的3人得分为“5,2,1”,因此,该小组的平衡值为7-5=2。
按上述要求,编写Python程序,功能如下:输入各小组每个成员的得分,计算并输出平衡值最大的小组编号及平衡值(如果有多个小组并列最大,那么全部输出)。
请回答下列问题:
(1)若取k=2,小组成员的得分不变,此时第一小组的平衡值是   。
(2)请在画线处填入合适的代码。
n=6; m=8; k=3
a=[0]*(n*m)
ans=[0]*n
#读取n个小组每个成员的得分,按组别从小到大依次存入数组a
#a[0]到a[m-1]存储第1小组m个成员的得分
#a[m]到a[2*m-1]存储第2小组m个成员的得分
#以此类推,代码略
def balance(w): #计算第w小组的平衡值
  c=[0]*21
  for i in range((w-1)*m,w*m):
    ①   
    c[t]+=1
  s1 = 20; t = k
  while t>0:
    if c[s1]>0:
      ②   
      t-=1
    else:
      ③   
  #求s2的过程代码略
  return s1-s2
maxg = -1
for i in range(1,n+1):
  ④   
  if g>maxg:
    maxg=g
    p = 0
    ans[p]=i
  elif g==maxg:
    p+=1
    ans[p]=i
for i in range(p+1):
  print("平衡值最大的小组编号为:" +str(ans[i])+",平衡值为:"+str(maxg))
15. 有一台自助饮料机,可以提供订单预约服务。每天晚上该机器都会对第二天所有的订单进行分析,并确定该机器第二天的开放时间。每份订单由开放时间、饮料种类和规格三部分构成(时间用分钟数表示,例如,70表示1:10,饮料种类和规格用正整数表示,种类不超过k),而饮料机最多可以装载m种不同的饮料,且饮料的量足够。机器会分析所有订单的种类需求,找到某个时间段开放,满足该时间段内所有人的饮料种类需求,且在满足时间段内的人数最多的基础上开放时间最短(不在开放时间内的订单不再考虑)。例如,当第二天的订单信息依次为 [10,1,2],[20,2,3],[25,3,6],[35,2,3],[40,1,4],且m=2时,最多能满足三个人的种类需求,最短的开放时间为20~35分钟,共16分钟。
请回答下列问题:
(1)当订单依次为[3,4,1],[20,3,3],[15,4,5],[30,2,6],[35,2,2],且m=2时,最短开放时间为   分钟。
(2)bsort 函数实现将订单按照时间升序排列,在调试过程中发现该函数无法实现功能。在该段代码中,第   (填写行号,行号范围1~7)行代码有误。
def bsort(order): # order数组存储所有的订单
  n=len(order)
  for i in range(n-1): 
    for j in range(n-i):
      if order[j][1]>order[j+1][1]: 
        order[j],order[j+1]=order[j+1],order[j]
  return order
(3)open_time函数实现计算最短开放时间,请在画线处填入合适的代码。
def open_time(order):
  order=bsort(order)
  n=len(order)
  i=0 ; j=0 ; st=i ; en=j
  tank=[0]*(k+1); occ=0
  while i    while j0 or occ      j+=1
      tank[order[j-1][1]]+=1
      if ①   :
        occ+=1
    if j-i>en-st or (j-i==en-st and order[j-1][0]-order[i][0]      st=i ; en=j
    while i      tank[order[i][1]]-=1
      i+=1
      if tank[order[i-1][1]]==0:
        ② 
        break
return order[en-1][0]-order[st][0]+1

展开更多......

收起↑

资源列表