资源简介 一、数组及其基本操作(B)1. (2024·浙江9+1联考)一个供销商有n批货,要卖给m位客户(n不一定大于m),虽然每一位客户出价均不相同,但供销商决定对每一批货设置相同的价格进行出售。出价的价格大于等于货物价格的客户将会买走货物。例如:供货商有5批货物,4位客户想要购买,他们出价分别为2,8,10,7,则供货商应该把价格设定为7,这样会有三位客户购买,自己的销售额为21。编写程序如下,输出货物标价,使供销商能够获得最大销售额。请在画线处填入合适的代码。#输入 n,m ,并将每位客户的出价保存在列表a,代码略price=maxp=0for i in range(m): s=0 for j in range(m): if a[i]<=a[j]: ① s+=1 if s>=n: ② s=n if s*a[i]>maxp: maxp=s*a[i] ③ price=a[i] print(price)【解析】 本题考查枚举算法的理解与应用。每位客户的出价保存在列表a,要使得销售额最大化,供销商标价必为客户出价中的某一个。因此采用枚举算法,一一列举每一位客户的出价,再用循环遍历列表a,若出价大于等于标价,则购买者人数加1,因此①处代码为s+=1。若购买者人数超过货物数量,此时供不应求,只能按照货物数量,即变量n作为最大购买人数,因此②处代码为s=n。求最大值算法,由最后一句输出语句可知,price变量表示最终标价,则满足当前的人数乘以出价大于最大值时,更新标价price变量的值,因此③处代码为price=a[i]。2. (2023·浙江6月选考)某仓库有一排连续相邻的货位,编号依次为0~n-1,用于放置A、B两种类型的箱子,A型箱子占2个相邻货位,B型箱子占1个货位。编写程序,根据已完成的放置或搬离操作,输出空货位数及还可以放置A型箱子的最多数量(不移动已放置的箱子)。请回答下列问题:(1)若n为10,开始时货位全空,经过如图所示的放置或搬离操作后,不移动已放置箱子的情况下,还可放置A型箱子的最多数量为 2或“两” 个。 箱子类型 B A B A A操作类型 放置 放置 放置 放置 搬离货位编号 5 2.3 0 7.8 2.3(2)实现上述功能的部分Python程序如下,请在画线处填入合适的代码。# 读取货位总数,存入n,代码略cnt1 = nlst = [0]*n # 货位状态,0表示对应的货位为空while True: # 读取本次已操作的数据:箱子类型、操作类型、货位编号起始值,存入t、d和s,代码略 if t == A : w = 2 ① elif t== B 或elif t== B 或elif (t== B ) : w=1 else: # t不是 A 或 B 时退出循环 break if d == P : # d为P时表示放置,否则表示搬离 ② cnt1 -=w或cnt1=cnt1 - w else: cnt1 + = w lst[s]=1-lst[s] if t == A : lst[s+1] = 1-lst[s+1] i, cnt2 = 0,0 while i < n-1: if lst[i]==0 and lst[i+1]==0: ③ i+=1或i=i+1 cnt2 + = 1 i + = 1 print("当前空货位数: ,cnt1, ,还可放置A型箱子的最多数量: ,cnt2)【解析】 本题考查Python编程基础及解决实际问题的能力。(1)10个空位放置情况如下图所示:由于一个A型箱子要占2个相邻货位,因此最多可放2个A型箱子。(2)①从初始cnt1=n可以看出,cnt1是空货位数量。再根据if语句第一个分支:t= A 时,w=2可知,当t= B 时,搬离数量应为1,故此处填:elif t== B 。②d= P 时表示放置,否则表示搬离。而搬离时cnt1+ =w,w变量为应搬离的数量,搬离时空位加w,则放置时空位减w,故此处填:cnt1-=w。③由代码可知,统计连续两个空位的个数,统计完后指针i要向后跳1,故此处填:i+=1。3. (2024·温州三模)某仓库记录每天出入库的情况,正数表示入库数量,负数表示出库数量。编写程序,查询出入库总量等于k的连续时间段。某星期出入库的情况为“10,-10,5,6,7,8,-5”,k值为18的连续时间段有第1天~第5天,第3天~第5天。请回答下列问题:(1)若将题干例子中的k值改为21,则有 3 个时间段满足要求。 (2)实现上述功能的部分Python程序如下,请在画线处填入合适的代码。#读取出入库情况,存入列表a中,读取k值。代码略pos={0:[-1]};count =0① cur=0 for i in range(len(a)): cur += a[i] ② pre=cur-k if pre in pos: for j in pos[pre]: print("时间段:",j+ 2,"~",i+1) ③ count+=1或count=count+1 if cur in pos: pos[cur].append(i) else: pos[cur]=[i]print("一共有",count,"个时间段")【解析】 本题考查前缀和知识及其应用。(1)第4天~第6天6,7,8的累加和为21,连续时间段5,6,7,8,-5与10,-10,5,6,7,8,-5的累加和为21,因此共有3个时间段。(2)①从语句cur +=a[i]来看,cur表示从索引位置0至i的累加和,需对cur赋初值为0。②从语句if cur in pos: 来看,字典pos的键是累加和出现的位置,如果不在字典中,新增一个键值对,如果在字典中,将该位置添加到该键对应的位置中。从语句print("时间段:",j+2,"~",i+1)来看,是一段累加和的差值,即cur-pre的值为k,因此②处语句为pre=cur-k。③count表示符合条件的总数,当出现一段符合条件时,将进行计数处理。4. (2024·浙江县域联盟模拟)某平台在新书上架前会邀请10位专业评审与10位大众评审给新书进行打分,评分区间为[1,20],得分计算规则为将专业评审均分的60%与大众评审均分的40%求和并取整,再根据得分给出推荐等级,1分为“☆”,2分为“☆☆”,5分可以升级为“ ”,最高推荐等级为“ ”。进行统计时,若两组评审中任一组评审人数少于7人,则本轮打分无效。请回答下列问题:(1)某新书计算后得分为11分,则推荐等级为 ☆ (填写等级符号,从高到低排列)。 (2)实现上述功能的部分Python程序如下,请在画线处填入合适的代码。#读取各评审的打分,存入s,且无异常数据,如s=["A12","B20","B7","A6","B6"……],“A”表示专业评审,“B”表示大众评审,代码略fa=fb=ca=cb=0for i in s: ① x=i[1:]或x=i[1::]或x=i[1:len(i)] if i[0]=="A": fa+=int(x) ca+=1 elif i[0]=="B": fb+=int(x) cb+=1if ② ca>=7 and cb>=7 : score=int(fa/ca*0.6+fb/cb*0.4) x=score%5 ③ y=score//5 或其他等价表达式 grade=" "*y+"☆"*x print("推荐度为:"+grade)else: print("本轮评分需重新进行!")【解析】 本题考查Python综合处理的相关知识。(1)已知5分是一个月亮,11分就有两个月亮和一个星星,故答案为: ☆。(2)①根据代码中未知量为x,所以得出第①空是求x的值,结合题目意思,i遍历的是各评审的打分s,所以x取值取的是各位评审的分数,若是A评审则累加到fa中,B评审累加到fb中,所以可得出答案x=i[1:]。第②空考虑的方向是ca和cb变量的作用,题目中要求“若两组评审中任一组评审人数少于7人则本轮打分无效”,所以我们要判断打分是否有效,故答案为ca>=7 and cb>=7,表示打分有效开始计算推荐度。这样第③空是要求解y的值,从x的值可以推断出是表示星星的个数,那么y的值则是月亮的个数,从x=score%5 中可以得出y月亮的求值大于等于5则升级,故答案为y=score//5。5. (2024·台州模拟)某路边有一排照明装饰灯,编号依次为1~n。现发现有多个装饰灯不亮,受维修成本的限制,只对其中的一部分进行维修,维修后保证有k个编号连续的装饰灯能够正常照明。编写程序,根据已损坏的装饰灯编号,输出最少需要维修的装饰灯的数量。请回答下列问题:(1)若路边有10个照明装饰灯(编号1~10),其中编号为1、4、8、10的装饰灯不亮,维修后需保证有6个编号连续的装饰灯能正常照明,则最少需要维修的装饰灯的数量是 1 。 (2)实现上述功能的部分Python程序如下,请在画线处填入合适的代码。# 输入照明装饰灯的总数n、编号连续的正常照明装饰灯数量k,代码略# 读取不亮的装饰灯编号,存入d,代码略v = [0] * (n + 1)c = [0] * (n + 1)ans = nfor i in ① range(len(d)) : v[d[i]] = 1for i in range(1, n + 1): c[i] = c[i-1] + v[i]i = 1while i <= n - k + 1: last = ② i+k-1 num = c[last] - c[i - 1] if ③ num ans = num i = i + 1print(ans)【解析】 本题考查阅读理解代码,数学建模的能力。(1)要连续6个编号的灯正常,只需要维修4号灯即可,数量是1。(2)阅读代码可知,本题代码的算法为:统计连续k盏灯中,不亮灯的数量。其中的最小值就是最少需要维修灯的数量。熟悉前缀和算法,能更好地理解本题代码。列表v保存的是每个灯的状态,列表c保存的是从起始位置到当前位置所有坏灯的数量,对应数列中的ai和si。利用列表c可以快速得出区间和。i-j之间的坏灯数量:c[i]-c[j-1]。①根据代码,这里是遍历d列表下标:range(len(d))。②i开始连续k个,最后一个的下标:i+k-1。③比现有结果小才更新结果变量ans,条件:num < ans。6. (2024·衢丽湖11月联考)某公司举办抽奖活动,设有一、二、三等奖。每张奖券印有 3 个互不相同的数字,每次在兑奖前公布中奖号码,兑奖时不考虑中奖数字的先后顺序,兑奖规则如下表所示。编程统计奖券获得的总奖金。请回答下列问题:奖项 一等奖 二等奖 三等奖兑奖条件 3个数字均匹配 2个数字匹配 1个数字匹配奖金 500元 200元 100元(1)某次中奖号码为 3,1,8,则号码为 1,6,3 的奖券可以获得奖金 200 元。 (2)实现上述功能的部分Python 程序如下,请在画线处填入合适的代码。# 输入中奖号码,依次存储到列表元素 win[0]至 win[2]中,代码略rew = [0,100,200,500]① mon=0 n = int(input("输入奖券数量:"))for i in ② range(n)或range(1,n+1)或其他相同作用答案 : cnt = 0 # 输入奖券的号码,依次存储到列表元素 tic[0]至 tic[2]中,代码略 for j in range(3): if tic[j] in win: cnt += 1 mon =③ mon+rew[cnt] print("总奖金金额为:",mon)【解析】 本题考查Python语言基础及简单算法知识。(1)中奖号码为 3,1,8而号码为 1,6,3 的奖券存在2个数字匹配,故获得奖金金额为200元。(2)①要计算总奖金金额mon,需要累加所有中奖奖券的金额,故需要赋初值为mon=0。同时③中mon要累加的是rew数组中对应的金额,索引为1表示1个数字匹配得100元,索引为2表示2个数字匹配得200元,索引为3表示3个数字匹配得500元。而cnt表示的是中奖的数量即为索引,故答案为mon+rew[cnt]。②要遍历的是所有奖券,根据输入奖券数量n,可得答案为range(n)。7. (2024·浙江名校协作体联考)列表nums有n(n>2)个整型元素,现要查找出缺失的第 1 个正整数并输出。若1~n 中没有缺失某个正整数,则输出n+1。例如,nums=[3,2,-1,0],则缺失的第1个正整数为1。例如,nums=[1,2,3,4,5,6],则缺失的第1个正整数为7。实现该功能的部分程序段如下:def findz(nums): n = len(nums) i=0 while i if 1 <= nums[i] <= n: p = nums[i] - 1 if : nums[p], nums[i] = nums[i], nums[p] i+=1 for i in range(n): if ① nums[i]!=i+1 : return i + 1 return ② n+1 #列表nums中存储了n个整型元素,代码略#调用函数findz,并输出结果,代码略请回答下列问题:(1)若nums=[-5,4,3,-1,0,1],则缺失的第1个正整数为 2 。 (2)方框中应填入的代码为 B (单选,填字母)。 A. nums[p] > 0B. nums[p] != nums[i]C. nums[p] > nums[i](3)请在画线处填入合适的代码。【解析】 本题考查Python语言基础、列表及枚举算法知识。(1)根据题意可知,按照正整数升序排序后的nums=[1, -1, 3, 4, 0, -5],因此缺失的第一个正整数为2。(2)根据代码可知,变量p用于记录按照正整数升序排序后的列表nums的索引值,如果列表的第一个元素(下标为0)的值为1,第二个元素(下标为1)的值是2,不需要交换,否则就将其交换到正确的位置去,例如将3交换到索引号为2的位置。如nums=[3,2,-1,0],按照正整数升序排序后,nums应该是[-1, 2, 3, 0],此时我们可以发现在1~4之间缺失的第一个正整数为1,也就是枚举nums的列表下标后,可以发现下标i(例如0)和列表元素值i+1不相等,因此就可以确定第一个下标0的值1缺失,以此类推,B正确。(3)①nums[i]为排序后的列表元素值,而i+1为按照正整数升序排序后的元素索引值。例如检测到列表索引值为0的元素值为1,索引值为1的元素值为2,说明不缺正整数,可以继续往下枚举索引值i,否则说明缺失对应的元素值,并返回该元素的值i+1。②枚举所有索引后,没有返回任何值,说明在1~n中没有缺失某个正整数,此时按照题意应该输出n+1。(共23张PPT)一、数组及其基本操作(B)第二章 数组与链表信息技术 选择性必修1 数据与数据结构必备知识练1. (2024·浙江9+1联考)一个供销商有n批货,要卖给m位客户(n不. 一. 定. 大. 于. m),虽然每一位客户出价均不相同,但供销商决定对每一批货设置相同的价格进行出售。出价的价格大于等于货物价格的客户将会买走货物。例如:供货商有5批货物,4位客户想要购买,他们出价分别为2,8,10,7,则供货商应该把价格设定为7,这样会有三位客户购买,自己的销售额为21。编写程序如下,输出货物标价,使供销商能够获得最大销售额。请在画线处填入合适的代码。#输入 n,m ,并将每位客户的出价保存在列表a,代码略price=maxp=0for i in range(m): s=0 for j in range(m): if a[i]<=a[j]: ①__________ if s>=n: ②__________ if s*a[i]>maxp: maxp=s*a[i] ③_____________ print(price)s+=1s=nprice=a[i]【解析】 本题考查枚举算法的理解与应用。每位客户的出价保存在列表a,要使得销售额最大化,供销商标价必为客户出价中的某一个。因此采用枚举算法,一一列举每一位客户的出价,再用循环遍历列表a,若出价大于等于标价,则购买者人数加1,因此①处代码为s+=1。若购买者人数超过货物数量,此时供不应求,只能按照货物数量,即变量n作为最大购买人数,因此②处代码为s=n。求最大值算法,由最后一句输出语句可知,price变量表示最终标价,则满足当前的人数乘以出价大于最大值时,更新标价price变量的值,因此③处代码为price=a[i]。2. (2023·浙江6月选考)某仓库有一排连续相邻的货位,编号依次为0~n-1,用于放置A、B两种类型的箱子,A型箱子占2个相邻货位,B型箱子占1个货位。编写程序,根据已完成的放置或搬离操作,输出空货位数及还可以放置A型箱子的最多数量(不移动已放置的箱子)。请回答下列问题:(1)若n为10,开始时货位全空,经过如图所示的放置或搬离操作后,不移动已放置箱子的情况下,还可放置A型箱子的最多数量为_____________个。 箱子类型 B A B A A操作类型 放置 放置 放置 放置 搬离货位编号 5 2.3 0 7.8 2.32或“两”(2)实现上述功能的部分Python程序如下,请在画线处填入合适的代码。# 读取货位总数,存入n,代码略cnt1 = nlst = [0]*n # 货位状态,0表示对应的货位为空while True: # 读取本次已操作的数据:箱子类型、操作类型、货位编号起始值,存入t、d和s,代码略 if t == A : w = 2 ①_______________________________________: w=1 else: # t不是 A 或 B 时退出循环 break if d == P : # d为P时表示放置,否则表示搬离 ②___________________________ else: cnt1 + = w lst[s]=1-lst[s]elif t== B 或elif t== B 或elif (t== B )cnt1 -=w或cnt1=cnt1 - w if t == A : lst[s+1] = 1-lst[s+1] i, cnt2 = 0,0 while i < n-1: if lst[i]==0 and lst[i+1]==0: ③___________________ cnt2 + = 1 i + = 1 print("当前空货位数: ,cnt1, ,还可放置A型箱子的最多数量: ,cnt2)i+=1或i=i+1【解析】 本题考查Python编程基础及解决实际问题的能力。(1)10个空位放置情况如下图所示:由于一个A型箱子要占2个相邻货位,因此最多可放2个A型箱子。(2)①从初始cnt1=n可以看出,cnt1是空货位数量。再根据if语句第一个分支:t= A 时,w=2可知,当t= B 时,搬离数量应为1,故此处填:elif t== B 。②d= P 时表示放置,否则表示搬离。而搬离时cnt1+ =w,w变量为应搬离的数量,搬离时空位加w,则放置时空位减w,故此处填:cnt1-=w。③由代码可知,统计连续两个空位的个数,统计完后指针i要向后跳1,故此处填:i+=1。3. (2024·温州三模)某仓库记录每天出入库的情况,正数表示入库数量,负数表示出库数量。编写程序,查询出入库总量等于k的连续时间段。某星期出入库的情况为“10,-10,5,6, 7,8,-5”,k值为18的连续时间段有第1天~第5天,第3天~第5天。请回答下列问题:(1)若将题干例子中的k值改为21,则有__________个时间段满足要求。 (2)实现上述功能的部分Python程序如下,请在画线处填入合适的代码。#读取出入库情况,存入列表a中,读取k值。代码略pos={0:[-1]};count =0①__________ for i in range(len(a)): cur += a[i] ②__________________ if pre in pos: for j in pos[pre]: print("时间段:",j+ 2,"~",i+1) ③__________________________________ if cur in pos: pos[cur].append(i) else: pos[cur]=[i]print("一共有",count,"个时间段")3cur=0pre=cur-kcount+=1或count=count+1【解析】 本题考查前缀和知识及其应用。(1)第4天~第6天6,7,8的累加和为21,连续时间段5,6,7,8,-5与10,-10,5,6,7,8,-5的累加和为21,因此共有3个时间段。(2)①从语句cur +=a[i]来看,cur表示从索引位置0至i的累加和,需对cur赋初值为0。②从语句if cur in pos: 来看,字典pos的键是累加和出现的位置,如果不在字典中,新增一个键值对,如果在字典中,将该位置添加到该键对应的位置中。从语句print("时间段:",j+2,"~",i+1)来看,是一段累加和的差值,即cur-pre的值为k,因此②处语句为pre=cur-k。③count表示符合条件的总数,当出现一段符合条件时,将进行计数处理。4. (2024·浙江县域联盟模拟)某平台在新书上架前会邀请10位专业评审与10位大众评审给新书进行打分,评分区间为[1,20],得分计算规则为将专业评审均分的60%与大众评审均分的40%求和并取整,再根据得分给出推荐等级,1分为“☆”,2分为“☆☆”,5分可以升级为“ ”,最高推荐等级为“ ”。进行统计时,若两组评审中任一组评审人数少于7人,则本轮打分无效。请回答下列问题:(1)某新书计算后得分为11分,则推荐等级为_______________(填写等级符号,从高到低排列)。 ☆(2)实现上述功能的部分Python程序如下,请在画线处填入合适的代码。#读取各评审的打分,存入s,且无异常数据,如s=["A12","B20","B7","A6","B6"……],“A”表示专业评审,“B”表示大众评审,代码略fa=fb=ca=cb=0for i in s: ①___________________________________ if i[0]=="A": fa+=int(x) ca+=1 elif i[0]=="B": fb+=int(x) cb+=1if ②______________________: score=int(fa/ca*0.6+fb/cb*0.4) x=score%5 ③____________________________________ grade=" "*y+"☆"*x print("推荐度为:"+grade)else: print("本轮评分需重新进行!")x=i[1:]或x=i[1::]或x=i[1:len(i)]ca>=7 and cb>=7y=score//5 或其他等价表达式【解析】 本题考查Python综合处理的相关知识。(1)已知5分是一个月亮,11分就有两个月亮和一个星星,故答案为: ☆。(2)①根据代码中未知量为x,所以得出第①空是求x的值,结合题目意思,i遍历的是各评审的打分s,所以x取值取的是各位评审的分数,若是A评审则累加到fa中,B评审累加到fb中,所以可得出答案x=i[1:]。第②空考虑的方向是ca和cb变量的作用,题目中要求“若两组评审中任一组评审人数少于7人则本轮打分无效”,所以我们要判断打分是否有效,故答案为ca>=7 and cb>=7,表示打分有效开始计算推荐度。这样第③空是要求解y的值,从x的值可以推断出是表示星星的个数,那么y的值则是月亮的个数,从x=score%5 中可以得出y月亮的求值大于等于5则升级,故答案为y=score//5。5. (2024·台州模拟)某路边有一排照明装饰灯,编号依次为1~n。现发现有多个装饰灯不亮,受维修成本的限制,只对其中的一部分进行维修,维修后保证有k个编号连续的装饰灯能够正常照明。编写程序,根据已损坏的装饰灯编号,输出最少需要维修的装饰灯的数量。请回答下列问题:(1)若路边有10个照明装饰灯(编号1~10),其中编号为1、4、8、10的装饰灯不亮,维修后需保证有6个编号连续的装饰灯能正常照明,则最少需要维修的装饰灯的数量是__________。 1(2)实现上述功能的部分Python程序如下,请在画线处填入合适的代码。# 输入照明装饰灯的总数n、编号连续的正常照明装饰灯数量k,代码略# 读取不亮的装饰灯编号,存入d,代码略v = [0] * (n + 1)c = [0] * (n + 1)ans = nfor i in ①_________________: v[d[i]] = 1for i in range(1, n + 1): c[i] = c[i-1] + v[i]i = 1while i <= n - k + 1: last = ②_____________ num = c[last] - c[i - 1] if ③_____________: ans = num i = i + 1print(ans)range(len(d))i+k-1num【解析】 本题考查阅读理解代码,数学建模的能力。(1)要连续6个编号的灯正常,只需要维修4号灯即可,数量是1。(2)阅读代码可知,本题代码的算法为:统计连续k盏灯中,不亮灯的数量。其中的最小值就是最少需要维修灯的数量。熟悉前缀和算法,能更好地理解本题代码。列表v保存的是每个灯的状态,列表c保存的是从起始位置到当前位置所有坏灯的数量,对应数列中的ai和si。利用列表c可以快速得出区间和。i-j之间的坏灯数量:c[i]-c[j-1]。①根据代码,这里是遍历d列表下标:range(len(d))。②i开始连续k个,最后一个的下标:i+k-1。③比现有结果小才更新结果变量ans,条件:num < ans。6. (2024·衢丽湖11月联考)某公司举办抽奖活动,设有一、二、三等奖。每张奖券印有 3 个互不相同的数字,每次在兑奖前公布中奖号码,兑奖时不考虑中奖数字的先后顺序,兑奖规则如下表所示。编程统计奖券获得的总奖金。请回答下列问题:奖项 一等奖 二等奖 三等奖兑奖条件 3个数字均匹配 2个数字匹配 1个数字匹配奖金 500元 200元 100元(1)某次中奖号码为 3,1,8,则号码为 1,6,3 的奖券可以获得奖金__________元。 200(2)实现上述功能的部分Python 程序如下,请在画线处填入合适的代码。# 输入中奖号码,依次存储到列表元素 win[0]至 win[2]中,代码略rew = [0,100,200,500]①__________ n = int(input("输入奖券数量:"))for i in ②__________________________________________: cnt = 0 # 输入奖券的号码,依次存储到列表元素 tic[0]至 tic[2]中,代码略 for j in range(3): if tic[j] in win: cnt += 1 mon =③________________ print("总奖金金额为:",mon)mon=0range(n)或range(1,n+1)或其他相同作用答案mon+rew[cnt]【解析】 本题考查Python语言基础及简单算法知识。(1)中奖号码为 3,1,8而号码为 1,6,3 的奖券存在2个数字匹配,故获得奖金金额为200元。(2)①要计算总奖金金额mon,需要累加所有中奖奖券的金额,故需要赋初值为mon=0。同时③中mon要累加的是rew数组中对应的金额,索引为1表示1个数字匹配得100元,索引为2表示2个数字匹配得200元,索引为3表示3个数字匹配得500元。而cnt表示的是中奖的数量即为索引,故答案为mon+rew[cnt]。②要遍历的是所有奖券,根据输入奖券数量n,可得答案为range(n)。7. (2024·浙江名校协作体联考)列表nums有n(n>2)个整型元素,现要查找出缺失的第 1 个正整数并输出。若1~n 中没有缺失某个正整数,则输出n+1。例如,nums=[3,2,-1,0],则缺失的第1个正整数为1。例如,nums=[1,2,3,4,5,6],则缺失的第1个正整数为7。实现该功能的部分程序段如下:def findz(nums): n = len(nums) i=0 while i if 1 <= nums[i] <= n: p = nums[i] - 1 if : nums[p], nums[i] = nums[i], nums[p] i+=1 for i in range(n): if ①__________________: return i + 1 return ②__________ #列表nums中存储了n个整型元素,代码略#调用函数findz,并输出结果,代码略nums[i]!=i+1n+1请回答下列问题:(1)若nums=[-5,4,3,-1,0,1],则缺失的第1个正整数为__________。 (2)方框中应填入的代码为__________(单选,填字母)。 A. nums[p] > 0B. nums[p] != nums[i]C. nums[p] > nums[i](3)请在画线处填入合适的代码。2B【解析】 本题考查Python语言基础、列表及枚举算法知识。(1)根据题意可知,按照正整数升序排序后的nums=[1, -1, 3, 4, 0, -5],因此缺失的第一个正整数为2。(2)根据代码可知,变量p用于记录按照正整数升序排序后的列表nums的索引值,如果列表的第一个元素(下标为0)的值为1,第二个元素(下标为1)的值是2,不需要交换,否则就将其交换到正确的位置去,例如将3交换到索引号为2的位置。如nums=[3,2,-1,0],按照正整数升序排序后,nums应该是[-1, 2, 3, 0],此时我们可以发现在1~4之间缺失的第一个正整数为1,也就是枚举nums的列表下标后,可以发现下标i(例如0)和列表元素值i+1不相等,因此就可以确定第一个下标0的值1缺失,以此类推,B正确。(3)①nums[i]为排序后的列表元素值,而i+1为按照正整数升序排序后的元素索引值。例如检测到列表索引值为0的元素值为1,索引值为1的元素值为2,说明不缺正整数,可以继续往下枚举索引值i,否则说明缺失对应的元素值,并返回该元素的值i+1。②枚举所有索引后,没有返回任何值,说明在1~n中没有缺失某个正整数,此时按照题意应该输出n+1。 展开更多...... 收起↑ 资源列表 一、数组及其基本操作(B).docx 一、数组及其基本操作(B).pptx