一、数组及其基本操作(B)课时练(学生版+教师版) 2025-2026学年高中信息技术 选择性必修1 数据与数据结构

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

一、数组及其基本操作(B)课时练(学生版+教师版) 2025-2026学年高中信息技术 选择性必修1 数据与数据结构

资源简介

一、数组及其基本操作(B)
1. (2024·浙江9+1联考)一个供销商有n批货,要卖给m位客户(n不一定大于m),虽然每一位客户出价均不相同,但供销商决定对每一批货设置相同的价格进行出售。出价的价格大于等于货物价格的客户将会买走货物。例如:供货商有5批货物,4位客户想要购买,他们出价分别为2,8,10,7,则供货商应该把价格设定为7,这样会有三位客户购买,自己的销售额为21。编写程序如下,输出货物标价,使供销商能够获得最大销售额。请在画线处填入合适的代码。
#输入 n,m ,并将每位客户的出价保存在列表a,代码略
price=maxp=0
for 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 = n
lst = [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=0
for 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+=1
if ② 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 = n
for i in ① range(len(d)) :
  v[d[i]] = 1
for i in range(1, n + 1):
  c[i] = c[i-1] + v[i]
i = 1
while i <= n - k + 1:
  last = ② i+k-1 
  num = c[last] - c[i - 1]
  if ③ num    ans = num
  i = i + 1
print(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] > 0
B. 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=0
for 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+=1
s=n
price=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.3
2或“两”
(2)实现上述功能的部分Python程序如下,请在画线处填入合适的代码。
# 读取货位总数,存入n,代码略
cnt1 = n
lst = [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,"个时间段")
3
cur=0
pre=cur-k
count+=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=0
for i in s:
  ①___________________________________
  if i[0]=="A":
    fa+=int(x)
    ca+=1
  elif i[0]=="B":
    fb+=int(x)
    cb+=1
if ②______________________:
  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>=7
y=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 = n
for i in ①_________________:
  v[d[i]] = 1
for i in range(1, n + 1):
  c[i] = c[i-1] + v[i]
i = 1
while i <= n - k + 1:
  last = ②_____________
  num = c[last] - c[i - 1]
  if ③_____________:
    ans = num
  i = i + 1
print(ans)
range(len(d))
i+k-1
num【解析】 本题考查阅读理解代码,数学建模的能力。(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=0
range(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+1
n+1
请回答下列问题:
(1)若nums=[-5,4,3,-1,0,1],则缺失的第1个正整数为__________。
(2)方框中应填入的代码为__________(单选,填字母)。
A. nums[p] > 0
B. nums[p] != nums[i]
C. nums[p] > nums[i]
(3)请在画线处填入合适的代码。
2
B
【解析】 本题考查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。

展开更多......

收起↑

资源列表