2025普通高中信息技术学业水平考试专题练--优化集训10 解析算法与枚举算法

文档属性

名称 2025普通高中信息技术学业水平考试专题练--优化集训10 解析算法与枚举算法
格式 docx
文件大小 300.1KB
资源类型 试卷
版本资源 通用版
科目 信息技术(信息科技)
更新时间 2025-03-07 19:26:25

图片预览

文档简介

中小学教育资源及组卷应用平台
2025普通高中信息技术学业水平考试
优化集训10 解析算法与枚举算法
1.下列问题中适合使用解析算法解决的是(  )
A.计算两个电阻的并联值
B.输出2~100以内的所有素数
C.查找100以内所有能被6整除的数
D.找出100以内所有6的倍数
2.有如下Python程序段:
 b=[5,3,2,1,8,6,7]
 a=b[1:5]
 k=″ ″
 for i in a:
if i%2==0:
 k=k 2
else:
 k=k+″ ″
 print(k)
执行该程序段后,显示结果是(  )
A. B.
C. D.
3.有Python程序段如下:
 s = 0
 for i in range(1,12,2):
if i % 3==0:
 s = s + i
 print(s)
执行该程序段后,输出结果为(  )
A.55 B.8 C.18 D.12
4.有以下Python程序:
 n=int(input())
 count=n
 while n>=3:
count=count+n//3
n=n%3+n//3
 print(count)
若输入n的值为15,则输出count的值为(  )
A.20 B.21 C.22 D.23
5.编写Python程序,将华氏温度转换为摄氏温度并保留两位小数,转换公式为:C=5 (F-32)/9,程序如下,划线处应填(  )
f=float(input(″请输入华氏温度:″))
c=        
print(″对应的摄氏温度为:%.2f ″%c)
                 
A.5//9 (f-32)
B.5/9 (f-32)
C.5/9 (f-32)
D.5/9(f-32) 
6.用枚举算法输出100以内既能被3整除又能被5整除的数据,我们可以从算法不同角度去思考,确定枚举范围,下列选项中Python程序处理有误的是(  )
A.for i in range(1,101):
if i%3==0 and i%5==0:
  print(i)
B.for i in range(1,101):
if i %15==0:
  print(i)
C.for i in range(15,101,15):
print(i)
D.for i in range(1,101//15):
 print(i 15)
7.某压缩算法的基本思想是用一个数值和一个字符代替具有相同值的连续字符串。例如,输入字符串“RRRRRGGBBBBBB”,压缩后数据为“5R2G6B”。实现上述功能的Python程序如下。
输入字符串:RRRRRGGBBBBBB
压缩后数据为:5R2G6B
请回答下列问题:
(1)请在程序划线处填入合适的代码。
(2)若删除加框处代码,输入字符串“RRRRRGGBBBBBB”,则压缩后结果为    。
s=input(″输入字符串:″)
c=1
①   
for i in range(len(s)-1):
if②     :
  c+=1
else:
  ans+=str(c)+s[i]
  ③   
ans+=str(c)+s[i]
print(″压缩后数据为:″,ans)
(3)该程序主要使用的算法属于   (单选,填字母:A.解析算法/B.枚举算法)。
8.百钱买百鸡问题:我国古代数学家曾经提出了这样一个问题:“鸡翁一值钱5,鸡母一值钱3,鸡雏三值钱1。问:花钱100买100只鸡,鸡翁、鸡母、鸡雏各几何 ”实现上述功能Python代码如下。请在划线处填入合适的代码。
for i in range(21):
for j in range(34):
 ①     
  if②       :
    print(″公鸡:″,i,″母鸡:″j,″小鸡:″k)
9.有四个数字:1、2、3、4,能组成多少个互不相同且无重复数字的三位数 输出所有满足条件的三位数的组合。编写Python程序如下,请将划线处代码补充完整。
arr=[]
for i in range(1,5):
for j in range(1,5):
  for k in range(1,5):
    num=100 i+10 j+k
    if i!=j and j!=k and ①    :
      arr.append(num)
print(②      ,″个″,arr) 
10.输入一段英文句子,以英文句号结尾,并把句中所有单词存入一个列表中,如此可以方便统计单词的个数,也方便读取任意位置单词。
例如输入:“I am a student of senior middle school.”
处理完毕后:[I,am,a,student,of,senior,middle,school],程序运行效果如下:
请输入一个英文句子:I am a student of senior middle school.
将单词分别存入列表后为:['I','am','a','student','of','senior','middle','school']
为实现上述功能,请完善以下Python程序,在划线处填入合适的代码。
s1 = input(″请输入一个英文句子:″)
list1=[]
s=″ ″
for ch in①    :
 if ″a″<=ch<=″z″ or ②      :
   s+=ch
 else:
   list1+=[s]
   ③     
print(″将单词分别存入列表后为:″,list1)
11.一张单据上有一个5位数的编码,由于保管不善,其万位数字和百位数以及十位数已经变得模糊不清,即“ 5 6”。但知道该数是37和17的倍数。现在用Python编程求解该问题,运行界面如图所示。输出所有满足这些条件的5位数,并统计这样的数的个数。
问题:
(1)请在划线处填入合适的代码。
(2)该算法使用的算法是      (选填:解析算法/枚举算法)
count=0
for i in range(①    ):
for j in range(100):
  if②             :
     count+=1
     print(③       )
print(″符合要求的数字数量:″,count)
12.求各个素数的和,例如在运行程序后输入:“2,3,4,5,6,7,8,”(不包括双引号,数字之间用逗号隔开),自动输出:“4个素数的和为: 17”。实现上述功能的Python代码如下,运行界面如图所示。
s=2,3,4,5,6,7,8,
4个素数的和为:17
>>>
请回答下列问题:
(1)在划线处填入合适的代码。
 def prime(n):
flag=True
for i in range(2,n):
 if ①    :
  flag=False
  break
if flag:
 return True
else:
 return False
 s=input(″s=″)  #主程序,输入数字字符,中间用逗号隔开
 t=0;ans=0
 n=0;k=0
 for i in range(len(s)):
if not(″0″<=s[i]<=″9″):
 ②    
 if prime(t):
  ③   
  n+=1
 k=i+1
 print(n,″个素数的和为:″,ans)
(2)若输入数据“33,2,3,4,7”,运行上述程序,得到求和的结果是    (仅填数字)。
13.在“三位一体”招生考试中,学考成绩占据一定的比例。某高校学考等级成绩折算表如下(学考等级分为 A、B、C、D、E ),如果有学科等级为E,则折合总分计0分。
某高校学考等级成绩折算表
学业水平考试等级 A B C D
成绩折算(分) 10 8 6 4
编写Python程序实现学考成绩折算。某学生的折合分数如下图所示。
请输入各学科学考等级:AAAAABACBA
折合分数为:92
(1)若输入的学生学考等级为“AAABBBCCDC”,则折合分数为:       。
(2)实现上述功能的Python程序如下,请在划线处填入合适的代码。
 s=input(″请输入各学科学考等级:″)
 ①   
 for t in ②    :
if t==″A″:
 scores+=10
elif t==″B″:
 scores+=8
elif t==″C″:
 scores+=6
elif t==″D″:
 scores+=4
else:
 scores=0
 ③   
 print(″折合分数为:″,scores)
14.学校开展“学宪法”知识竞赛活动,其中有一项任务为完成“学宪法”答卷记得分。答卷含有5个客观题和5个主观题,其中客观题1~4题为单选题,第5题为多选题,单选题每题分值为2分;多选题全对得2分,漏选、少选得1分,多选、错选不得分。为了提高改卷效率,学校信息技术组的老师设计并编写了一个Python小程序,输入客观题正确答案和答卷上的答案,即可计算得分。实现上述功能的Python程序如下,运行界面如图所示。
请输入5题正确答案:AABDACD
请输入5题答题结果:ABBDAC
客观题得分为:7分
 def judge(x,y):
f=True
i=0
while i if y[i] not in x:
  ①   
  break
 i=i+1
return f
 num=0
 key=input(″请输入5题正确答案:″)
 s=input(″请输入5题答题结果:″)
 for j in range(5):
if j==4:
  if key[j:len(key)]==s[j:len(s)]:
  num=num+2
 elif ②    :
  num=num+1
else:
 if s[j]==key[j]:
  num=num+2
 print(″客观题得分为:″+ ③     +″分″)
(1)请补全划线处代码。
(2)若正确答案为“AABDACD”,答题给出答案为“ABBCAD”,则客观题最终得分为    分。
优化集训10 解析算法与枚举算法
1.A 解析 本题考查解析算法。计算两个电阻的并联值适合使用数学函数关系运算,故选A。
2.D 解析 本题考查Python语言基础及字符串知识。经过切片后列表a的值为[3,2,1,8]。当i为3时,k值变为“ ”;当i的值为2时,k值变为原先的2倍,即“ ”;当i的值为1时,k值变为“ ”,当i的值为8时,k值变为6个“ ”,故选D。
3.D 解析 本题实质上是求循环变量i中3的倍数的和:3+9=12,故答案选D。
4.C 解析 第1次循环后n=5,count=20; 第2次循环后n=3,count=21; 第3次循环后n=1,count=22。
5.C 解析 此题关键是要将数学表达式C=5 (F-32)/9,转换成python表达式。
6.D 解析 这道题考核的是枚举算法的范围及其等价表达式。选项A,B,C答案均正确,通过条件数学等价式分析,我们发现能被15整除的数一定能被3和5同时整除。从算法执行的效率上来看,选项A,B枚举的范围都是[1,100],执行次数相同。选项C枚举的是公差为15的等差数列,100以内的数据共有6个:15,30,45,60,75,90。因此选项C枚举算法执行效率较高。选项D本意是想枚举15的整数倍,错误的原因在于边界。101//15值为6,但是变量i的取值为[1..5],因此选项D错误原因是遗漏了90这组解。
7.(1)①ans=″ ″ ②s[i]==s[i+1] ③c=1 (2)5R2G (3)B 解析 本题考查枚举算法。(1)①字符串变量ans初始化。②由于for语句中i从0开始,因此相邻的两个字符相同的表达式为s[i]==s[i+1]。③若相邻的两个字符不同,则意味着用于连续相邻相同字符数的变量c恢复为1,为记录下一组字符做准备。(2)由于删除了加框处代码,由于无法触发else分支,因此最后一组数据无法输出,故答案是5R2G。(3)由代码可知,枚举所有的字符,并进行比较,属于典型的枚举算法。
8.①k=100-i-j ②i 5+j 3+k/3==100 解析 本题考查枚举算法。利用变量k降低循环的次数,小鸡的数量等于100减去公鸡和母鸡的数量,然后利用总共的鸡的价格一百元钱,列举出公鸡、母鸡和小鸡的数量。
9.①k!=i and num not in arr ②len(arr) 解析 本题考查枚举算法。数字无重复,且该数字之前未出现在列表arr中。输出该列表的长度。
10.①s1 ②″A″<=ch<=″Z″ ③s=″ ″ 解析 本题考查枚举算法。利用枚举法列举ch为字符串s1的值,若是连续的大小写英文字母的组合,则进行正向连接,若遇到非英文字母(空格)则将前面的字母组合(单词)s累加到列表list1[]中,且将字符串s清空,为接收下一个英文单词做准备。
11.(1)①1,10 ②(i 10000+5006+j 10)%37==0 and (i 10000+5006+j 10)%17==0 ③i 10000+5006+j 10 (2)枚举算法 解析 本题考查枚举算法。(1)①最高位不可能是0,因此从1开始枚举,一直到9。②该数是37和17的倍数,故表达式为(i 10000+5006+j 10)%37==0 and (i 10000+5006+j 10)%17==0。③该数的表达式为i 10000+5006+j 10。(2)列举范围内所有的可能性,且有判断和输出语句,符合枚举算法的特点。
12.(1)①n%i==0 ②t=int(s[k:i]) ③ans+=t(答案不唯一) (2)5 解析 本题考查Python基础知识及切片知识。(1)①若n能被i整除,则n就不是素数。故此处表达式为 n%i==0。②结合代码上下文,可知此处t的表达式是被逗号分隔的数字字符,且必须转换为数字类型,k是改组数字字符的开始位置,i是改组数字字符的结束位置(逗号位置),综上,表达式为t=int(s[k:i])。③变量ans是素数的累加结果,因此答案是ans+=t。(2)由于最后的7后面没有逗号,因此素数的和是2+3=5。
13.(1)76 (2)①scores=0 ②s ③break 解析 (1)3 10+3 8+3 6+4=76;(2)根据循环条件可知,变量scores没有赋值过,所以①中填写scores=0;由t==″A″可知,t为字符串s的值,故②中填写s;根据题中描述,如果有学科等级为E,则折合总分计0分,③中填写break。
14.(1)①f=False ②judge(key[j:len(key)],s[j:len(s)]) ③str(num) (2)5 解析 (1)本题考查的算法思路是字符串的比对,1~4题是单选题,因此只要使用循环结构依次在正确答案和答卷答案中对应位置取出字符进行比对即可,若比对上即为答对,总分累加2分;若未比对上即为答错,不得分。第5题是多选题,因为存在漏选、少选和错选的情况,答对得2分,漏选、少选得1分,错选不得分,因此需要使用自定义函数judge(x,y)进行判断。调用函数judge(x,y)得,若结果为True则表明是漏选、少选,得1分;若结果为False则表明是错选,不得分。①空所在语句表示当错选时得结果,故答案为f=False。②空所在语句表示将第5题答案并不是全对时,取出第5题答卷上的答案利用函数judge(x,y)进行判断是漏选、少选还是错选,故答案为judge(key[j:len(key)],s[j:len(s)])。③空所在语句表示最终得分的输出,要注意是以字符的形式进行输出,故答案为str(num)。(2)根据题干给出的计算规则可得。
21世纪教育网 www.21cnjy.com 精品试卷·第 2 页 (共 2 页)
21世纪教育网(www.21cnjy.com)
同课章节目录