中小学教育资源及组卷应用平台
2024信息技术学业水平考试专题练
优化集训13 解析算法与枚举算法
1.下列问题中适合使用解析算法解决的是( )
A.计算两个电阻的并联值
B.输出2~100以内的所有素数
C.查找100以内所有能被6整除的数
D.找出100以内所有6的倍数
2.编写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)
3.用枚举算法输出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)
4.解析算法的基本思想是根据问题的 与 之间的关系,找出求解问题的 ,并通过表达式的 来实现问题的求解。
5.枚举算法的程序实现中,使用 (单选,填字母:A.分支结构/B.循环结构)罗列出问题所有可能的解,循环中通过 (单选,填字母:A.分支结构/B.循环结构)判断当前的可能解是不是真正的解。
6.编写Python程序,实现如下功能:输入全票价格和消费者身高,输出消费者应付的实际票价。实际票价的计算规则为:身高1.2米及以下免票;身高1.2米以上且1.4米及以下半票;身高超过1.4米全票。程序代码如下。在划线处填上合适的代码。
jg=float(input('请输入全票价格:'))
h=float(input('请输入消费者身高(米):'))
if h<=1.2:
pj=0
①
pj=jg 0.5
②
pj=jg
print('票价为',round(pj,2),'元')
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位数的编码,由于保管不善,其万位数字和百位数以及十位数已经变得模糊不清,如图a所示,即“ 5 6”。但知道该数是37和17的倍数。现在用Python编程求解该问题,运行界面如图b所示。输出所有满足这些条件的5位数,并统计这样的数的个数。
问题:
(1)请在划线处填入合适的代码。
(2)该算法使用的算法是 (选填:解析算法/枚举算法)
图a
图b
count=0
for i in range(① ):
for j in range(100):
if② :
count+=1
print(③ )
print(″符合要求的数字数量:″,count)
12.完全数(Perfect number),又称完美数或完备数,是一些特殊的自然数。它所有的真因子(即除了自身以外的约数)的和(即因子函数),恰好等于它本身。请你完善下面Python程序,找出1000以内的所有完全数。
def perfect(m):
if m<=1:return False
sum=1
for i in range(2,m//2+① ):
if m%i==0② :
sum+=i
return m==sum
list1=[]
for i in range(1,1001):
if perfect(i):
list1.append(i)
print(list1)
优化集训13 解析算法与枚举算法
1.A 解析 本题考查解析算法。计算两个电阻的并联值适合使用数学函数关系运算,故选A。
2.C 解析 此题关键是要将数学表达式C=5 (F-32)/9,转换成python表达式。
3.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这组解。
4.前提条件 所求结果 数学表达式 计算
5.B A
6.①elif h<=1.4: ②else: 解析 ①根据题意可知满足条件pj=0.5 jg 半价h<=1.4,多条件的分支,只有第1个条件跟在if后面,第2个条件开始跟在elif后面。②第2个条件也不满足时pj=jg,所以是对第2个条件的否定,但不需要引导新的条件else:。
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.①2,m//2+1 ②m%i==0 解析 本题采用的是枚举算法,由于1是所有数的因子,所以我们只枚举因子范围是除1和m数之外所有因子,①答案为2,m-1。但从算法效率思考:由于最小因子是2,最大因子是m//2,所以最佳答案为2,m//2+1,这样处理算法的效率将提升一倍。②处需要判断i是否为m的约数,应填写的代码是m%i==0。
21世纪教育网 www.21cnjy.com 精品试卷·第 2 页 (共 2 页)
21世纪教育网(www.21cnjy.com)