资源简介 综合核心素养测评卷(一)一、 选择题(本大题共12小题,每小题列出的四个备选项中只有一个是符合题目要求的)1. 序列“1,2,3,2,1”依次放入某种数据结构后又从该数据结构中取出。若放入和取出规则均符合栈或队列的规则,那么当取出序列为下列哪个时,无法确定该数据结构是栈还是队列( B )A. 2,1,3,1,2 B. 1,2,3,2,1C. 1,2,1,2,3 D. 1,2,3,1,2【解析】 本题考查栈、队列的基本特点。由栈和队列的操作特点知,序列出栈顺序和入栈顺序可以一样也可以不一样,而序列入队和出队顺序必然是一样的。由此可以判定A、C、D必然是出栈序列,该数据结构肯定是栈结构,均不符合题意。而B取出顺序和输入顺序完全一致,无法确定是栈还是队列结构,符合题意。2. 某二叉树的树形结构如图所示,后序遍历结果为“WUSVTR”,则该二叉树的前序遍历结果为( D )A. RSTUVW B. RTSVUWC. RTSUWV D. RSUWTV【解析】 本题考查二叉树。结合后序遍历可画出树形结构,所以前序遍历的结果为RSUWTV。D正确。3. 用Python列表模拟队列,并设置队头指针head指向队首元素,队尾指针tail指向队尾元素的下一个位置,判断一个长度为n的循环队列为空的条件是( C )A. head ,tail=0,1 B. head!=tailC. 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=0while 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, 1while (1) : if a[p] != a[q]: (2) p += 1 q += 1print( (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 66. 有如下Python程序段:a="Python"; q=[0]*6head,tail=0,0i=len(a)-1while i>=0: if i%3!=0: q[tail]=a[i] else: q[tail]=q[head] head+=1 tail+=1 i-=1print(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 randoma=[0]*6for i in range(6): a[i]=random.randint(1,5)*2+1i=0while i<5: if a[i]>a[i+1]: a[i],a[i+1]=a[i+1],a[i] else: a[i]+=1 i+=1print(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=0while 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+1C. 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. 2500C. 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 randomd = [0] * 6for i in range(6): d[i] = random.randint(1,10)i = 0j = len(d)- 1while 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 - 1print(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 randomkey=random.randint(0,4)*2+5a=[4,5,5,8,9,11,11,13,15,17]n=10;ans=0;i=0;j=n-1while 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. 27C. 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 30B 2 20C 3 10 表2下单时间 货品及数量12:00 2B7A14:00 7B15: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=3a=[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-s2maxg = -1for 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]=ifor 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 breakreturn 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,1C. 1,2,1,2,3 D. 1,2,3,1,22. 某二叉树的树形结构如图所示,后序遍历结果为“WUSVTR”,则该二叉树的前序遍历结果为( )A. RSTUVW B. RTSVUWC. RTSUWV D. RSUWTV3. 用Python列表模拟队列,并设置队头指针head指向队首元素,队尾指针tail指向队尾元素的下一个位置,判断一个长度为n的循环队列为空的条件是( )A. head ,tail=0,1 B. head!=tailC. head==tail D. head=(tail+1)%n4. 有如下Python程序段:a=["123","456","789"]s1="31,12,23,33"s2="";i=0while 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, 1while (1) : if a[p] != a[q]: (2) p += 1 q += 1print( (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]*6head,tail=0,0i=len(a)-1while i>=0: if i%3!=0: q[tail]=a[i] else: q[tail]=q[head] head+=1 tail+=1 i-=1print(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 randoma=[0]*6for i in range(6): a[i]=random.randint(1,5)*2+1i=0while i<5: if a[i]>a[i+1]: a[i],a[i+1]=a[i+1],a[i] else: a[i]+=1 i+=1print(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=0while 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+1C. i=j-1 D. i=j9. 有如下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. 2500C. 2550 D. 505010. 有如下Python程序段:import randomd = [0] * 6for i in range(6): d[i] = random.randint(1,10)i = 0j = len(d)- 1while 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 - 1print(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 randomkey=random.randint(0,4)*2+5a=[4,5,5,8,9,11,11,13,15,17]n=10;ans=0;i=0;j=n-1while 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. 27C. 37 D. 4412. 现用链表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 30B 2 20C 3 10 表2下单时间 货品及数量12:00 2B7A14:00 7B15: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 s14. 有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=3a=[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-s2maxg = -1for i in range(1,n+1): ④ if g>maxg: maxg=g p = 0 ans[p]=i elif g==maxg: p+=1 ans[p]=ifor 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: ② breakreturn order[en-1][0]-order[st][0]+1 展开更多...... 收起↑ 资源列表 综合核心素养测评卷(一) (原卷版).docx 综合核心素养测评卷(一) (解析版).docx