内容正文:
2023-2024学年浙教版高一下学期第二章第一节 枚举算法
一、选择题
1.课堂上老师给出题目:查找1000以内所有能被13整除并且末尾是5的自然数。下列算法最合适的是( )
A.查找法 B.迭代法 C.解析法 D.枚举法
2.某算法的部分流程图如下图所示:
执行该算法,下列描述正确的是( )
A.t←t+2执行了4次
B.s≤35? 执行了4次
C.循环结构后,t的值为7
D.该算法体现了枚举算法思想
3.数组a中存放了某校田径运动会中八名100米短跑运动员的成绩,数据存放情况如下表:
a(1)
a(2)
a(3)
a(4)
a(5)
a(6)
a(7)
a(8)
12.8
13.3
12.3
12.6
13.5
12.1
13
13.8
若按升序排列,并采用冒泡排序算法自右向左进行比较和交换,那么前两轮排序的数据交换总次
数为( )。
A.5 B.6 C.7 D.8
4.读程序,写出下列程序的输出结果
55、s = 1
For j =" 100" To -100 Step -1
s =" s" * j
Next j
MsgBox (s)
上述程序段中s =" s*j" 的执行次数是( )
A.400 B.401 C.200 D.201
5.小李忘记了密码箱上设置的三位数密码,于是他从“000”开始尝试,一直到成功打开密码箱为止。这种解锁方法采用的算法是( )。
A.解析算法 B.穷举算法 C.递归法 D.选择排序
6.下列问题中不适合使用枚举算法解决的是( )
A.求全部两位数奇数。
B.求1000以内同时能被3和5整除的所有自然数的和
C.裴波那切函数
D.输入两个数,求最大公约数
7.水仙花数是三位整数:其各位数字立方各等于该数本身,如153=1^3+5^3+3^3,如果要求出所有的水仙花数,下列算法最合适的是( )
A.枚举法 B.查找法 C.解析法 D.排序法
8.小李在解决“查找50以内能被7整除的数”时,将50以内能被7整除的数列举出来:7,14,21,28,35,42,49,他主要采用了( )来解决问题
A.枚举法 B.解析法 C.递归法 D.分治法
9.通过列举所有的可能进行密码破解,用到的算法是( )
A.递推 B.递归 C.穷举 D.分治
10.下列问题是适合使用枚举算法的是( )
A.计算两个电阻的关联值
B.找出100以内所有6的倍数
C.校园歌曲大赛的成绩排名
D.根据时长计算停车场收费
11.穷举法的适用范围是( )
A.一切问题 B.解的个数极多的问题
C.解的个数有限且可以一一列举 D.不适合设计算法
12.下列语句用于计算“s=1+4+7+10+…+25”的值。
①For i=1 To 25 Step 3 ②Next i ③s=0 ④s=s+i
正确的语句顺序是( )
A.①②③④ B.①③④②
C.③①④② D.④③①②
13.以下能用枚举算法求解的是( )
A.已知三角形的三边长度,求三角形的面积
B.求所有能被15和25整除的三位数
C.已知梯形的上底、下底和高,求梯形的面积
D.将十进制数转换为二进制
14.穷举法的适用范围是( )
A.一切问题
B.所求问题的解无限多
C.所求问题解的个数有限且有明确的条件
D.所求问题解的个数有限且无明确的条件
15.算法是为了解决问题。下列哪个问题最适合用枚举法求解?( )
A.求一个圆柱体的表面积和体积 B.求解百钱买百鸡问题
C.一元二次方程求解 D.一个篮球从10米处做自由落体运动,求落地时的速度
二、填空题
16.自幂数是指一个 n 位数,它的每个位上的数字的 n 次幂之和等于它本身。使用枚举法寻找5位数以内的自幂数算法如下:
(1)使用循环列出1到99999中的每一个数zmsknz
(2)通过自定义函数ddknzms拆解得到每个数中的每位数上的数码及它们对应的n次幂之和
(3)将zmsknz与ddknzms进行比较,若相等则说明是自幂数,可将其加入列表。
编写VB程序,使用枚举法得到5位数以内的自幂数,程序设计界面如图所示:
请根据算法及相应注释将下面的程序补充完整:
Function ddknzms(zmsknz As Long) As Long '得到可能的自幂数
Dim zmsknz_str As String '字符串类型自幂数可能值
Dim zmsknz_length As Integer, zmswsxh As Integer '字符串类型自幂数可能值字符个数
zmsknz_str = Trim(Str(zmsknz))
zmsknz_length = Len(zmsknz_str)
For zmswsxh =" 1" To zmsknz_length
ddknzms =" ddknzms" + Val(Mid(zmsknz_str, zmswsxh, 1)) ^ ①
Next zmswsxh
End Function
Private Sub Command1_Click()
Const ZMSWS = 5
Dim zmsknz As Long, zmsknz_zz As Long
zmsknz_zz =" 10" ^ ZMSWS - 1
For zmsknz =" 1" To zmsknz_zz
If ② Then List1.AddItem (Str(zmsknz))
Next zmsknz
End Sub
17.枚举算法的程序实现中,使用 (单选,填字母:A.分支结构/B.循环结构)罗列出问题所有可能的解,循环中通过 (单选,填字母:A.分支结构/B.循环结构)判断当前的可能解是不是真正的解。
18.设有n盏灯,放在一排。从1 到 n依次顺序编号。有 n个人也从1到n依次编号。第1个人(1号)将灯全部关闭,第2个人(2号)将凡是2的倍数的灯打开,第3个人(3号)将凡是3的倍数的灯做相反处理(该灯如果为打开的,则将它关闭,如关闭的将它打开),以后的人和3号一样,将凡是自己号数倍数的灯做相反处理。问当n个人操作后,哪几盏灯是亮的。(亮灯为0,关闭为1)
为了实现这一目标,完善下列程序,使之能完成该功能。
Private Sub Command1_Click()
Const n=20
Dim i As Integer,j As Integer
Dim a(1 To n) As integer
For j=1 To n
a(j)=0
Next j
For i=1 To n
For j=1 To n
If j Mod i=0 Then
‘(1)
End If
Next j
Next i
For j=1 To n
If Then List1.AddItem Str(j) ‘(2)
Next j
End Sub
19.素数:只能被1和它本身整除的自然数。要求编写VB程序找出任意两个整数之间中所有的素数及个数,程序运行界面如下图所示。
请根据算法将下列程序补充完整。
Function prime(a As Integer) As Boolean
Dim j As Integer
prime = True
j = 2
Do While prime And j <=" a" \ 2
If a Mod j =" 0" Then
prime = False
Exit Do
End If
①
Loop
End Function
Private Sub Command1_Click( )
Dim i As Integer, a As Integer, b As Integer
Dim count As Integer
a = Val(Text1.Text)
b = Val(Text2.Text)
For i =" a" To b
If ② =" True" Then
List1.AddItem Str(i)
count =" count" + 1
End If
Next i
Label1.Caption = "素数共有" + Str(count) + "个!"
End Sub
20.下面程序的功能是:计算表达式1+3+5+…+(2n-1)的值,在文本框Text1中输入n的值,结果在文本框Text2中输出。则程序中划线处的语句应填____________。
Private Sub Command1_Click()
Dim sum As Long,i As Integer,n As Integer
sum = 0
n = Val(Text1.Text)
For i =" 1" To 2 * n - 1 Step 2
Next i
Text2.Text=Str(sum)
End Sub
三、操作题
21.程序完善题。该程序要实现的功能是:计算下列分段函数的值。请将程序中方框部分的程序段补充完整。
Dim x As Single
Dim y As Single
x = Val(InputBox("请输入x的值:"))
Print y
22.七灯游戏是一款经典的益智类游戏。游戏中,有七盏灯排成一圈,如图a所示,初始时灯的开关状态随机生成,操作其中某一盏灯,则可以切换该灯的“开/关”状态,同时,这盏灯对面的两盏灯也会切换“开/关”状态,如图b所示:
图a
图b
图a为初始状态,操作圈中的灯,则该灯与对面的两盏灯都会切换“开/关”状态,如图b所示。假设这些灯的编号为0到6号,“开/关”状态随机产生,并输出到列表框List1中,接着需要从中选出数盏灯进行操作,使得最后所有灯都打开(已证明方案-一定存在且唯一), 并在列表框List2中输出灯的编号。
程序采用枚举策略,一一尝试对每盏灯状态进行“切换"操作,“1”表示对当前灯进行切换,“0”表示不操作。
程序运行界面如图c所示。
图c
(1)0-6号灯的初始状态为“关 关 关 开 关 关 开”,如对1号灯进行切换操作,对面随之切换灯的编号是:_________________和_____________
(2)实现上述功能的VB程序如下,请在划线处填入合适的代码。
Dim a(0 To 6)As Integer,b(0 To 6) As Integer
Private Sub Command1_Click()
Dim i As Integer,x As Integer,pos As Integer
Dim flag As Boolean
List2.Clear
For i = 0 To __________①________
x = i:pos = 0:flag = True
For j = 0 To 6
b(j)= a(j)
Next j
Do While x > 0
If x Mod 2 = 1 Then
b(pos)= 1 - b(pos)
b((pos + 3) Mod 7) = 1 – b((pos + 3) Mod 7)
___________②_______
End If
pos = pos + 1
x = x \ 2
Loop
For j = 0 To 6
If _____③___ Then flag = False:Exit For
Next j
If flag Then
pos = 0
Do While i > 0
If i Mod 2 = 1 Then List2.AddItem "第" + CStr(pos)+ "号"
i = i \ 2
pos = pos + 1
Loop
Exit For
End If
Next i
End Sub
Private Sub Form_Load()’随机生成初始数据
Dim i As Integer
Randomize
List1.Clear
For i = 0 To 6
a(i)= Int(Rnd * 2)
If a(i)= 1 Then
List1.AddItem "第" + CStr(i) + "号:"+ "开"
Else
List1.AddItem "第" + CStr(i) + "号:" + "关"
End If
Next i
End Sub
试卷第1页,共3页
试卷第1页,共3页
学科网(北京)股份有限公司
参考答案:
1.D
2.A
3.D
4.D
5.B
6.C
7.A
8.A
9.C
10.B
11.C
12.C
13.B
14.C
15.B
16.(1)zmsknz_length (2)ddknzms(zmsknz) = zmsknz
17. B A
18. a(j)=1-a(j) a(j)=0
19.① j =" j" + 1 ② prime(i)
20.sum=sum+i
21.if x<10 then
y=0
else
if x<50 then
y=2+1.5*x
else
y=2/3/x
end if
22.(1)4 5
(2)①2^7-1或127
②b((pos+4)Mod7)=1-b((pos+4)Mod7)
③b(j)=0
答案第1页,共2页
答案第1页,共2页
学科网(北京)股份有限公司
$$