内容正文:
2.4 常见算法的程序实现
一、选择题
1.公鸡5文钱1只,母鸡3文钱1只,小鸡3只1文钱,用100文钱买100只鸡,其中公鸡、母鸡和小鸡都必须要有,问公鸡、母鸡和小鸡各多少只?解决该问题主要运用的算法思想是( )
A.解析法 B.枚举法 C.递归 D.递推
2.( )是把问题可能的解一一列举出来,然后判断出每一个列举出的所有可能的解是否为正确的解。
A.解析算法 B.枚举算法 C.分治算法 D.递归算法
3.下列问题适合用枚举法求解的是()
A.一元二次方程求解
B.一个篮球从10米处做自由落体运动,求落地时的速度
C.求一个圆柱体的表面积和体积
D.求解百钱买百鸡问题
4.使用枚举算法解决问题的最大优势是( )
A.枚举算法设计直接、简单 B.枚举算法时间复杂度低
C.枚举算法空间复杂度低 D.枚举算法可以解决所有问题
5.用于求变量s值的算法如下:
①变量s的初值是0,变量n的初值是1;②若变量n的值大于100,则转到步骤⑤;
③;④n的值增加1,转到步骤②;
⑤输出s的值;⑥结束。
下列数学表达式中,其计算结果与上述算法执行后变量s的值相等的是( )
A. B.
C. D.
6.在编写python程序时缩进的作用是()。
A.让程序更美观 B.只在for循环中使用
C.只在if语句中使用 D.用来界定代码块
7.为了促进节能减排,某市在夏季采用阶梯电价进行收费,规定每月100度以下(含100度)按每度电0.6元收费;当超过100度,未超过200度,超过100度的部分按每度1元收费,否则超过200度部分则按每度2元收费。根据以上规则得出以下分段函数:
利用以上分段函数计算电费的算法属于( )。
A.排序法 B.解析法 C.二分法 D.递归法
8.已知在一直角三角形中,直角边a,b为整数,斜边C为不大于50的整数,输入直边a,输出所有满足条件的直角三角形三边a,b,c。解题思路为在斜边C的范围内,检验直角边b是否满足条件。这种算法是( )
A.解析算法 B.枚举算法 C.查找算法 D.排序算法
9.有以下程序段:
m=5
sum=0
while m<10:
sum=sum+m
m=m+1
print(sum)
程序运行后输出的结果为: ( )
A.45 B.26 C.56 D.35
10.如要编程画出由100个圆组成的图案,比较好的算法是( )。
A.按顺序执行100个画不同大小圆的程序段
B.①先编写1个能画不同大小圆的程序模块 ②在主程序中用100语句调用画圆程序模块
C.①先编写1个能画不同大小圆的程序模块 ②用循环方法调用100次画圆程序模块
D.不必先定义画圆程序模块,而直接循环100次的方法来画图案
11.以下问题,适合用枚举法解决的是( )
A.已知圆的半径和圆的面积公式求圆的面积
B.利用求和公式计算1+3+5+7+…+100的和
C.已知三角形三边长度,通过海伦公式求出三角形的面积
D.中国科学家们通过对4万多种抗疟疾的化合物和中草药的筛选,最终屠呦呦发现青蒿素具有良好抗疟效果(由此屠呦呦获得2015年诺贝尔奖)
12.有如下VB程序段:
Dim i As Integer, j As Integer,cnt As Integer, Key As Integer
Dim a(1 To 100) As Integer
a(1) = 1
For i = 2 To 100
a(i) = a(i - 1) + Int(Rnd * 2)
Next i
Key = Val(Text1.Text)
i = 1: j = 100: cnt = 0
Do While i <= j
m = Fix((i + j) / 2)
cnt = cnt + 1
If Key <= a(m) Then
j = m - 1
Else
i = m + 1
End If
Loop
下列说法不正确的是( )
A.若Key=a(1),则程序运行结束时j的值必为0
B.若Key=100,则程序运行结束时i的值必为101
C.输入任意Key值,程序运行结束时表达式i=j+1恒成立
D.输入任意Key值,程序运行结束时cnt的值可能为6或7
13.有如下VB程序段:
Private Sub Command1_Click()
Dim a(1 To 9) As Integer
Dim i As Integer, sum As Integer
Dim s As String, ch As String
s = "ABCDEFGHIJK"
a(1) = 1
For i = 2 To 10
ch = Mid(s, i, 1)
a(i) = a(i - 1) * (Asc(ch) - Asc("A"))
Next i
For i = 2 To 10
sum = sum + (a(i) - a(i - 1))
Next i
Label1. Text = Str(sum)
End Sub
程序运行时,单击命令按钮Command1后,将会出现的提示信息是( )
A.溢出 B.未找到方法或数据成员
C.下标越界 D.类型不匹配
14.解析算法是通过找出解决问题的前提条件与结果之间的关系表达式,并计算表达式来实现问题的求解,下列问题适合用解析算法求解的是( )
A.用公式计算行人过马路最短绿灯时长问题 B.在10000个零件中找出一个质量不同的零件问题
C.“韩信点兵”问题 D.“鸡兔同笼”问题
15.用枚举算法求解“找出所有满足各位数字之和等于6的三位数”时,下列所列举的数值范围,算法执行效率最高的是( )
A.从0到999 B.从100到999 C.从100到600 D.从105到600
16.某算法的部分流程图如右图所示。执行这部分流程,变量a的值是( )
A.4 B.5 C.1 D.0
17.有如下VB程序段
Dim a(1 To 5)As Integer
Dim d(1 To 5)As Integer
a(1)=12:a(2)=21:a(3)=19:a(4)=11:a(5)=20
n=5:Max=0
For i=1 To n
d(i)=0
For j=1 To i-1
If a(j)<a(i)Then d(i)=d(i)+1
Next j
If d(i)>Max Then Max=d(i)
Next i
执行完以上程序段后,Max的值为( )
A.1 B.2 C.3 D.4
二、填空题
18.现要找出200以内的能被4或5或6整除的正整数,用计算机解决该问题时应采用的算法是 算法。
19.在现代程序设计中,我们用 建立计算机世界的实体与客观世界的实体相一致的映射关系,问题的解决方案可以用一些彼此交互的对象来 表示。
20.小申设计了一个算法,能够根据输入的三条线路的距离,找出最短距离,请将流程图空白处填写完整:① ② ③
21.函数的调用采用 的方式。
22.阅读以下程序,写出程序运行结果。
def jc(n):
s=1
for i in range(2,n+1):
s=s*i
return s
total=jc(4) #调用jc函数
print(total)
程序运行后,其输出结果为
三、判断题
23.有一种算法是把所有可能的答案一一列举,合适就保留,不合适就丢弃。这种方法称作“枚举”或“穷举”。 ( )
四、操作题
24.水仙花数是指一个三位数,它的每个位上的数字的3次方之和就等于它本身,例如:1**3+5**3+3**3=153。这类三位数也被叫做自恋数、自幂数或者阿姆斯特朗数。
[问题求解]设这个数存放于变量x中,变量g、s、b分别存放个位、十位、百位上的数。需得分离数字得到每位上的数,即将变量g、s、b表示为x的形式。请阅读如下python程序,在空白处填写适当的表达式或语句,使程序完整。
print ("三位数之内的水仙花是:")
for x in (100,1000):
b=x//100
s=(x//10)
g=
If x=(b**3 +s**3+g**3):
print( )
试卷第1页,共3页
试卷第1页,共3页
学科网(北京)股份有限公司
参考答案:
1.B
【详解】本题考查枚举算法的应用。穷举法也叫枚举法,将问题的所有可能的答案一一列举,然后根据条件判断此答案是否合适,合适就保留,不合适就丢弃。百钱买百鸡,求解这个问题,最适合的算法是枚举法。故选B。
2.B
【详解】本题考查算法相关内容。解析算法是指能够找出表示问题的前提条件和结果之间的关系的数学表达式,并通过表达式的计算来实现问题的求解。枚举算法是把问题可能的解一一列举出来,然后判断出每一个列举出的所有可能的解是否为正确的解。分治算法将一个复杂的问题分解为两个或更多的简单子问题,这些子问题相互独立且与原问题性质相同,然后递归地解决这些子问题,并将它们的解合并以得到原问题的解。递归算法在计算机科学中是指一种通过重复将问题分解为同类的子问题而解决问题的方法。故本题答案是B选项。
3.D
【详解】本题主要考查枚举算法。求解百钱买百鸡问题,可以通过枚举所有可能,找出百钱可以买百鸡的所有解,故本题选D选项。
4.A
【详解】本题考查枚举算法。枚举算法的最大优势是其设计直接、简单。枚举算法是一种朴素的穷举方法,通过遍历所有可能的解空间,逐一检查每个可能的解,从中找到满足条件的解。这使得枚举算法的设计相对直接简单,容易理解和实现。然而,并非所有问题都适合使用枚举算法,因为在某些情况下,其时间复杂度可能较高,但在设计直接简单的优势方面,枚举算法仍然具有一定优势。故答案为:A。
5.B
【详解】本题主要考查算法及其实现。分析算法可知,该程序变量n的范围是从1到100,当n是奇数时执行s=s+n,当n是偶数时,执行s=s-n,即奇数位相加,偶数位相减,故1−2+3−4+⋯⋯−100计算结果与上述算法执行后变量s的值相等,故本题选B选项。
6.D
【详解】本题考查的是Python语句格式。在编写python程序时,缩进可以使得代码非常整齐规范,赏心悦目,提高可读性,因此作用是用来界定代码块。故本题应选D。
7.B
【详解】本题主要考查解析算法。该分段函数是具体的数学表达式,利用以上分段函数计算电费的算法属于解析法,故本题选B选项。
8.B
【详解】本题主要考查算法描述。输出所有满足条件的直角三角形三边a,b,c,可知这种算法是枚举算法,故本题选B选项。
9.D
【详解】本题考查程序执行相关知识点
第一轮 m=5,sum=5
第二轮 m=6,sum=11
第二轮 m=7,sum=18
第二轮 m=8,sum=26
第二轮 m=9,sum=35
第二轮 m=10,退出循环
故本题选D
10.C
【详解】本题主要考查算法知识。程序中用来执行一个特定任务的一段程序代码可使用程序模块实现,重复执行部分可使用循环结构,因此C选项正确。
【点睛】
11.D
【详解】本题考查的是枚举算法。枚举法是利用计算机运算速度快、精确度高的特点,对要解决问题的所有可能情况,一个不漏地进行检验,从中找出符合要求的答案。已知圆的半径和圆的面积公式求圆的面积、利用求和公式计算1+3+5+7+…+100的和、已知三角形三边长度通过海伦公式求出三角形的面积可以采用解析法。故本题应选D。
12.B
【详解】本题考查VB程序相关知识点
若Key=a(1),则while循环会一直执行,直到j的值为0。故选项A的说法正确
i的值不会超过j即100。故本题选B选项
if条件里,i与j在程序结束时满足if条件则j=m-1不满足条件i=m+1故相差1,且i大于j。故选项C的说法正确
m = Fix((i + j) / 2),i、j的初值分别为1,100,所以while循环最多循环6次或7次。故选项D说法正确
13.A
【详解】本题考查VB程序操作相关的知识点
数组a的范围是1-9,但是程序中的for循环会出现a(10)的情况,单击命令按钮Command1后,将会出现的提示信息是溢出。故本题选A选项
14.A
【详解】本题考查的是解析算法。解析算法是通过找出解决问题的前提条件与结果之间的关系表达式,并计算表达式来实现问题的求解。在10000个零件中找出一个质量不同的零件问题、“韩信点兵”问题、“鸡兔同笼”问题适合用枚举法。故本题应选A。
【点睛】
15.D
【详解】本题考查的是算法的优化。用枚举算法求解“找出所有满足各位数字之和等于6的三位数”,首先可以排除比600大的数据,故上限为600。最小的三位数是100,但是三个数字之和为6的最小的数是105,故下限值为105。所以算法执行效率最高的是从105到600。故选项D正确。
16.D
【详解】本题考查的是流程图的识读。由流程图可知a=35\1\2\3\4\5=17\3\4\5=5\4\5=0\5=0,故选项D正确。
17.C
【详解】本题考查VB程序查找比较算法相关知识点
i=1时,不满足条件,不执行跳过
i=2时,d(2)=0,j=1时,a(1)=12<a(2)=21,d(2)=1,Max=d(2)=1
i=3时,d(3)=0,j=1时,a(1)=12<a(3)=19,d(3)=1, j=2时,a(2)=21>a(3)=19
i=4时,d(4)=0,j=1时,a(1)=12>a(4)=11,j=2时,a(2)=21>a(4)=11,j=3时,a(3)=19>a(4)=11
i=5时,a(1)、a(3)、 a(4)均小于a(5),故Max=3。故本题选C选项
18.枚举/穷举
【详解】本题主要考查枚举算法。现要找出200以内的能被4或5或6整除的正整数,用计算机解决该问题时应采用的算法是枚举算法,枚举所有的可能。
19. 对象 形象化
【详解】本题考查程序设计相关知识。在现代程序设计中,我们用对象建立计算机世界的实体与客观世界的实体相一致的映射关系,问题的解决方案可以用一些彼此交互的对象来形象化表示。
20. a<b a<c
b<c
【详解】本题考查算法流程图选择结构程序设计相关内容。分析题意可知,该流程图的作用是求取三个正整数的最小值。结合求最小值方法和该流程图示意,可得答案:①a<b;②a<c;③b<c。答案不唯一,其他能得出正确结论的表达式也可以。
21.函数名(参数)
【详解】本题考查的是Python函数相关知识。函数的调用采用函数名(参数)的方式。
22.24
【详解】本题考查的是Python函数及循环语句。由s=s*i及 range(2,n+1)可知返回值是s=1*2*3*……n,total=jc(4)=1*2*3*4=24。
23.对
【详解】本题考查的是枚举算法。枚举法就是按问题本身的性质,一一列举出该问题所有可能的解,并在逐一列举的过程中,检验每个可能解是否是问题的真正解。故题干说法是正确的。
24. range %10 x% 10或x-b*100-s*10或其它同等答案 x
【详解】本题考查的是Python程序设计。水仙花数是指一个三位数,故使用range函数遍历100~999;s存放的是十位数,故可以选对x取整后再除以10求余,故第二空应填%10(求余符号%);g是存放个位,直接除以10求余,或减去前面整百和整十的数,故第三空为:x% 10或x-b*100-s*10或其它同等答案;如果找到满足条件的数,则输出,故第四空为:x。
答案第1页,共2页
答案第1页,共2页
学科网(北京)股份有限公司
$$