第11课 枚举算法——一个都不放过课后练习--小学信息科技Python程序设计

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

第11课 枚举算法——一个都不放过课后练习--小学信息科技Python程序设计

资源简介

/ 让教学更有效 精品试卷 | 信息
第11课 课后练习
(学生用)
班级:____________ 姓名:____________ 得分:__________
一、填空(每空 3 分,共 24 分)
1.枚举(穷举)的意思是 ______________________________________。
2.三位水仙花数的枚举范围是 range(______, ______)。
3.取一个三位数 n 的百位,写法是 n // ______;取个位写法是 n % ______。
4.百钱百鸡中,公鸡最多 ______ 只,所以循环范围可写成 range(0, ______)。
5.百钱百鸡中,小鸡的只数可以用 100 - ______ - ______ 直接算出来。
6.枚举时要做到「不重不漏」,关键是确定好 ______________。
二、判断对错(每题 3 分,共 12 分)
1.枚举法一定比巧妙的算法慢,所以没有用。(  )
2.把 range(1, 1001) 改成 range(100, 1000) 会让结果变少。(  )
3.枚举范围设大一点只会让程序变慢,不会让结果变错。(  )
4.百钱百鸡中,小鸡的数量必须能被 3 整除。(  )
三、手算模拟题(12 分)
判断下面各数是否为水仙花数,填表。
n 百位 a 十位 b 个位 c a +b +c 是否水仙花数
153
222
407
三位水仙花数一共有 ______ 个。
四、★ 补全代码(每空 5 分,共 20 分)
第 1 题 求 100~999 中的所有水仙花数。
for n in range(100, ①______):
a = n // 100
b = n // 10 % 10
c = n % 10
if ②__________________ == n:
print(n)
第 2 题 鸡兔同笼:头 35 个,脚 94 只。
for chicken in range(0, 36): # 鸡的只数
rabbit = 35 - chicken
if chicken * 2 + rabbit * 4 == ③______:
print("鸡", chicken, "只,兔", rabbit, "只")
① ______ ② ______ ③ ______
第 3 题 枚举法求 1~100 中能被 7 整除的数。
for n in range(1, 101):
if n % ④______ == 0:
print(n, end=" ")
④ ______
五、★★ 提高题(每题 10 分,共 30 分)
第 1 题 完数(一题多解)
完数是指「所有真因子之和等于它自己」的数,例如 6 = 1+2+3。请用枚举法找出 1~1000 中所有的完数。
要求:① 先写一个循环求每个数 n 的所有真因子之和;② 判断和是否等于 n。
______________________________________________________________
______________________________________________________________
______________________________________________________________
______________________________________________________________
______________________________________________________________
______________________________________________________________
______________________________________________________________
______________________________________________________________
______________________________________________________________
______________________________________________________________
第 2 题 枚举次数的优化
下面是求 1~100 内所有「平方数」(即 n = i × i)的两种写法,请判断哪种枚举次数更少,并说明理由。
# 写法一
for n in range(1, 101):
for i in range(1, n + 1):
if i * i == n:
print(n)
# 写法二
for i in range(1, 11):
print(i * i)
枚举次数更少的是写法 ______,因为:
______________________________________________________________
______________________________________________________________
______________________________________________________________
第 3 题 读程序写结果
cnt = 0
for a in range(1, 5):
for b in range(1, 5):
if a + b == 5:
cnt += 1
print(a, b)
print("共", cnt, "组")
输出结果:
______________________________________________________________
______________________________________________________________
______________________________________________________________
______________________________________________________________
这道题一共枚举了 ______ 次(两个循环各 4 次)。
六、★★★ 挑战题(每题 12 分,共 24 分)
第 1 题 百钱百鸡(完整实现)
公鸡 5 元一只,母鸡 3 元一只,小鸡 3 只 1 元。用 100 元买 100 只鸡,求所有可能的买法。
要求:① 正确设置公鸡、母鸡的枚举范围;② 小鸡只数用计算得出而不再循环;③ 输出每一组解,并统计共有几组解。
______________________________________________________________
______________________________________________________________
______________________________________________________________
______________________________________________________________
______________________________________________________________
______________________________________________________________
______________________________________________________________
______________________________________________________________
______________________________________________________________
______________________________________________________________
______________________________________________________________
______________________________________________________________
第 2 题 数字组合(一题多解)
用 1、2、3、4 这四个数字,能组成多少个没有重复数字的三位数?请分别用「枚举法」和「排列计数」两种思路回答,并编程验证你的答案。
提示:枚举时可以用三重循环,并判断三个数字互不相同。
______________________________________________________________
______________________________________________________________
______________________________________________________________
______________________________________________________________
______________________________________________________________
______________________________________________________________
______________________________________________________________
______________________________________________________________
______________________________________________________________
______________________________________________________________
______________________________________________________________
______________________________________________________________
教师评语:
__________________________________________________________________
__________________________________________________________________
21世纪教育网 www.21cnjy.com 精品试卷·第 2 页 (共 2 页)
21世纪教育网(www.21cnjy.com)/ 让教学更有效 精品试卷 | 信息
第11课 课后练习
(答案版 · 教师用)
班级:____________ 姓名:____________ 得分:__________
一、填空(每空 3 分,共 24 分)
1.枚举(穷举)的意思是 ______________________________________。
2.三位水仙花数的枚举范围是 range(______, ______)。
3.取一个三位数 n 的百位,写法是 n // ______;取个位写法是 n % ______。
4.百钱百鸡中,公鸡最多 ______ 只,所以循环范围可写成 range(0, ______)。
5.百钱百鸡中,小鸡的只数可以用 100 - ______ - ______ 直接算出来。
6.枚举时要做到「不重不漏」,关键是确定好 ______________。
二、判断对错(每题 3 分,共 12 分)
1.枚举法一定比巧妙的算法慢,所以没有用。(  )
2.把 range(1, 1001) 改成 range(100, 1000) 会让结果变少。(  )
3.枚举范围设大一点只会让程序变慢,不会让结果变错。(  )
4.百钱百鸡中,小鸡的数量必须能被 3 整除。(  )
三、手算模拟题(12 分)
判断下面各数是否为水仙花数,填表。
n 百位 a 十位 b 个位 c a +b +c 是否水仙花数
153
222
407
三位水仙花数一共有 ______ 个。
四、★ 补全代码(每空 5 分,共 20 分)
第 1 题 求 100~999 中的所有水仙花数。
for n in range(100, ①______):
a = n // 100
b = n // 10 % 10
c = n % 10
if ②__________________ == n:
print(n)
第 2 题 鸡兔同笼:头 35 个,脚 94 只。
for chicken in range(0, 36): # 鸡的只数
rabbit = 35 - chicken
if chicken * 2 + rabbit * 4 == ③______:
print("鸡", chicken, "只,兔", rabbit, "只")
① ______ ② ______ ③ ______
第 3 题 枚举法求 1~100 中能被 7 整除的数。
for n in range(1, 101):
if n % ④______ == 0:
print(n, end=" ")
④ ______
五、★★ 提高题(每题 10 分,共 30 分)
第 1 题 完数(一题多解)
完数是指「所有真因子之和等于它自己」的数,例如 6 = 1+2+3。请用枚举法找出 1~1000 中所有的完数。
要求:① 先写一个循环求每个数 n 的所有真因子之和;② 判断和是否等于 n。
______________________________________________________________
______________________________________________________________
______________________________________________________________
______________________________________________________________
______________________________________________________________
______________________________________________________________
______________________________________________________________
______________________________________________________________
______________________________________________________________
______________________________________________________________
第 2 题 枚举次数的优化
下面是求 1~100 内所有「平方数」(即 n = i × i)的两种写法,请判断哪种枚举次数更少,并说明理由。
# 写法一
for n in range(1, 101):
for i in range(1, n + 1):
if i * i == n:
print(n)
# 写法二
for i in range(1, 11):
print(i * i)
枚举次数更少的是写法 ______,因为:
______________________________________________________________
______________________________________________________________
______________________________________________________________
第 3 题 读程序写结果
cnt = 0
for a in range(1, 5):
for b in range(1, 5):
if a + b == 5:
cnt += 1
print(a, b)
print("共", cnt, "组")
输出结果:
______________________________________________________________
______________________________________________________________
______________________________________________________________
______________________________________________________________
这道题一共枚举了 ______ 次(两个循环各 4 次)。
六、★★★ 挑战题(每题 12 分,共 24 分)
第 1 题 百钱百鸡(完整实现)
公鸡 5 元一只,母鸡 3 元一只,小鸡 3 只 1 元。用 100 元买 100 只鸡,求所有可能的买法。
要求:① 正确设置公鸡、母鸡的枚举范围;② 小鸡只数用计算得出而不再循环;③ 输出每一组解,并统计共有几组解。
______________________________________________________________
______________________________________________________________
______________________________________________________________
______________________________________________________________
______________________________________________________________
______________________________________________________________
______________________________________________________________
______________________________________________________________
______________________________________________________________
______________________________________________________________
______________________________________________________________
______________________________________________________________
第 2 题 数字组合(一题多解)
用 1、2、3、4 这四个数字,能组成多少个没有重复数字的三位数?请分别用「枚举法」和「排列计数」两种思路回答,并编程验证你的答案。
提示:枚举时可以用三重循环,并判断三个数字互不相同。
______________________________________________________________
______________________________________________________________
______________________________________________________________
______________________________________________________________
______________________________________________________________
______________________________________________________________
______________________________________________________________
______________________________________________________________
______________________________________________________________
______________________________________________________________
______________________________________________________________
______________________________________________________________
教师评语:
__________________________________________________________________
__________________________________________________________________
第 11 课 参考答案(教师用)
与《教师参考答案》册同源,全部数值均已实际运行核验
一、填空
1.按顺序把所有可能的情况一个一个试一遍 2.100、1000 3.100、10
4.20、21 5.x、y 6.枚举范围(循环的起止值)
二、判断对错
1.×(枚举虽然慢,但可靠、易写,是竞赛的重要解题手段)
2.×(水仙花数只可能是三位数,范围缩小不会漏解) 3.√ 4.√
三、手算模拟题
n 百位 a 十位 b 个位 c a +b +c 是否水仙花数
153 1 5 3 1+125+27=153 是
222 2 2 2 8+8+8=24 否
407 4 0 7 64+0+343=407 是
三位水仙花数一共有 4 个(153、370、371、407)。
四、★ 补全代码
① 1000 ② a 3 + b 3 + c ** 3 ③ 94 ④ 7
五、★★ 提高题
第 1 题:
for n in range(2, 1001):
s = 0
for i in range(1, n):
if n % i == 0:
s += i
if s == n:
print(n)
结果:6、28、496。
第 2 题:写法二的枚举次数更少。写法一是两层循环,对每个 n 都要试 n 次,总共约 5050 次;写法二只循环 10 次(i 从 1 到 10,i × i 最大到 100),效率高得多。这说明找到直接的计算办法,比盲目枚举快很多。
第 3 题:输出 4 组解(1 4、2 3、3 2、4 1),共 4 组;一共枚举了 4 × 4 = 16 次。
六、★★★ 挑战题
第 1 题:
cnt = 0
for x in range(0, 21):
for y in range(0, 34):
z = 100 - x - y
if z >= 0 and z % 3 == 0 and 5 * x + 3 * y + z // 3 == 100:
cnt += 1
print(f"公鸡 {x} 只,母鸡 {y} 只,小鸡 {z} 只")
print("共", cnt, "组解")
结果共 3 组解:(0, 25, 75)、(4, 18, 78)、(8, 11, 81)、(12, 4, 84)——实际为 4 组。
第 2 题:思考方向。枚举法用三重循环遍历百位、十位、个位(各 4 个选择),判断三数互不相同,统计满足条件的三位数个数。排列计数法:百位可选 4 个数、十位剩 3 个、个位剩 2 个,共 4 × 3 × 2 = 24 个。编程验证应输出 24。
21世纪教育网 www.21cnjy.com 精品试卷·第 2 页 (共 2 页)
21世纪教育网(www.21cnjy.com)

展开更多......

收起↑

资源列表