本公众号推出真题回顾系列,将VB题目进行了Python改编,并在最后附上对于目前选考备考来说,还有价值的其它题目。
改编过程中:感慨万千。大概只有我们信息技术学科,在短短十年间,变化如此之大。
信息技术教师必须具备两种学习意识:对于底层知识,需要“慢思考”,沉下心去啃硬骨头,建立深刻的理解,这可能需要几年甚至十几年的积累。对于应用层知识,需要“快学习”,快速上手,快速迭代,甚至要有“用完即弃”的觉悟。这种精神上的分裂和持续的压力,是其他学科教师难以体会的。
也因此,浙江技术选考造就了一大批优秀的信息科技教师。
今天是第十三期,继续看看我们的来时路。
一、选择题第9题:选择排序比较次数
【2022年1月原题】9.现有三个整数序列:“1,2,3,4,5”、“7,1,6,8,3”、“9,8,7,6,5”。用选择排序算法分别对三个序列进行升序排列,比较次数依次为 x、y、z,则下列关系正确的是
A. x = y = z B. x > y > z C. y > z > x D. z > y > x
【Python版】现有三个整数序列 [1,2,3,4,5]、[7,1,6,8,3]、[9,8,7,6,5]。若都使用选择排序进行升序排列,比较次数依次为 x、y、z,则下列关系正确的是
A. x = y = z B. x > y > z C. y > z > x D. z > y > x
解析
·选择排序无论原序列是否有序,每一趟都要在未排序部分中完整寻找最小值,因此比较次数只由数据个数决定。
·三个序列长度都为 5,所以比较次数完全相同,故选 A。
二、选择题第10题:交错阶乘和
【2022年1月原题】10.设 s = 1 - 1/3! + 1/5! - 1/7! + ... + (-1)^(n-1)/(2n-1)!,其中 n 为正整数,计算 s 值的 VB 程序段如下:
s = 1 : i = 1 : t = 1Do While i < 2 * n - 1______①______Loop
方框中的代码由以下三部分组成:
① s = s + t ② i = i + 2 ③ t = -t / (i * (i - 1))
下列选项中,代码顺序正确的是
A. ③①② B. ①②③ C. ②①③ D. ②③①
【Python版】设 s = 1 - 1/3! + 1/5! - 1/7! + ... + (-1)**(n-1)/(2*n-1)!,其中 n 为正整数。计算 s 值的 Python 程序如下:
s =1i =1t =1while i <2* n -1:______①______
方框中的代码由以下三部分组成:
① s = s + t ② i += 2 ③ t = -t / (i * (i - 1))
下列选项中,代码顺序正确的是
A. ③①② B. ①②③ C. ②①③ D. ②③①
解析
·每一轮要先把 i 增加 2,才能从当前项过渡到下一项对应的阶乘位置。
·随后利用新的 i 更新 t,再把这一项加到 s 中,因此顺序应为②③①。
·故选 D。
三、选择题第11题:多数投票法
【2022年1月原题】11.有如下 VB 程序段:
k = 1 : ch = Mid(s, 1, 1)For i = 2 To Len(s)If k = 0 Thench = Mid(s, i, 1) : k = 1ElseIf ch = Mid(s, i, 1) Then k = k + 1 Else k = k - 1End IfNext i
变量 s 分别取下列值并运行程序段后,ch 的值不为“Q”的是
A. "QQTQT" B. "TQTTQ" C. "QTRTQ" D. "RTTQQ"
【Python版】有如下 Python 程序段:
k =1ch = s[0]for i inrange(1, len(s)):if k ==0:ch = s[i]k =1else:if ch == s[i]:k +=1else:k -=1
变量 s 分别取下列值并运行程序段后,ch 的值不为“Q”的是
A. "QQTQT" B. "TQTTQ" C. "QTRTQ" D. "RTTQQ"
解析
·这个过程等价于多数投票法,最后留下的是当前候选字符。
·A、C、D 三项运行后 ch 都为 Q;B 项运行后最终留下的是 T。
·故选 B。
四、选择题第12题:对分查找路径
【2022年1月原题】12.某对分查找算法的 VB 程序段如下:
key = Val(Text1.Text)s = "" : i = 1 : j = 10Do While i <= jm = (i + j) \ 2If a(m) = key Then Exit DoIf key < a(m) Thenj = m - 1 : s = s + "L"Elsei = m + 1 : s = s + "R"End IfLoop
按非降序排序的整型数组 a(1) 到 a(10) 的值依次为“11,23,31,39,44,52,60,x,69,89”。在文本框 Text1 中输入 66,执行该程序段后 s 值为“RRL”,则 x 的可能值个数为
A. 3 B. 4 C. 5 D. 6
【Python版】按非降序排序的整型数组 a[0] 到 a[9] 的值依次为 [11,23,31,39,44,52,60,x,69,89]。输入 66,执行下面的 Python 程序后,s 的值为 "RRL":
key =66s =""i =0j =9while i <= j:m = (i + j) //2if a[m] == key:breakif key < a[m]:j = m -1s +="L"else:i = m +1s +="R"
则 x 的可能值个数为
A. 3 B. 4 C. 5 D. 6
解析
·第一次比较 44,66 更大,所以先得到 R;第二次比较第 8 个位置上的 x,要继续得到 R,必须满足 66 > x。
·第三次比较 69,要得到 L,条件成立;又因为数组非降序,还要满足 60 <= x <= 69 且 x 不能等于已有元素。
·综合可得 x 可以取 60 到 65 中除去 60 的 61、62、63、64、65,共 5 个,故选 C。
五、非选择题第15题:投票合并与过半判断
【2022年1月原题】15.某校以投票方式评选优秀作品,每张选票仅填一个作品编号,得票数过半的获最具人气奖。小李已将收集的选票按作品编号非降序排序,小王收集的选票未排序。现要求将全部选票按作品编号非降序排序,找出获最具人气奖的作品编号。

【Python版】某校以投票方式评选优秀作品。小李收集的选票已按作品编号非降序排列,小王收集的选票未排序。现要求将全部选票按作品编号非降序排列,并找出得票数过半的作品编号。对应的 Python 程序如下:

请完善划线处代码:
# m 和 n 为常量,代码略# a[0:m] 为小李收集的选票,已排序;a[m:n] 为小王收集的选票,未排序c = [""] * nfor i inrange(m, n -1):for j inrange(n -2, i -1, -1):____①____if a[k] < a[j]:a[j], a[k] = a[k], a[j]i =0___②___for k inrange(n):if j >= n:c[k] = a[i]i +=1elif ____③____:c[k] = a[i]i +=1else:c[k] = a[j]j +=1ans ="无"for i inrange(n //2):if c[i] == c[i + n //2]:ans = c[i]breakprint(ans)
解析
·填空①应为 k = j + 1,这样每轮把较大的编号逐步向后冒到有序位置。
·填空②应为j = m,
·填空③应为 i < m and a[i] <= a[j],用于把前半段已排序部分与后半段排序后的结果进行归并。
六、非选择题第16题:按宾馆分组最少派车
【2022年1月原题】16.某会务组根据参会者提交的入住宾馆和到达指定上车点时间的信息,安排车辆接送参会者去宾馆。不同宾馆的参会者分开接送,同一宾馆的参会者可同乘一辆车,每辆车最多接送 v 人,每个参会者的等待时间都不超过 w 分钟。

【Python版】某会务组根据参会者提交交的入住宾馆和到达指定上车点时间的信息,安排车辆接送参会者去宾馆。不同宾馆的参会者分开接送,同一宾馆的参会者可同乘一辆车,每辆车最多接送 v 人,每个参会者的等待时间都不超过 w 分钟。参会者入住的宾馆和到达上车点的时间用长度为 7 的字符串表示,例如“A-09:15”表示参会者当天入住 A 宾馆,9 点 15 分到达上车点,如果 w 为 10,那么该参会者最晚 9 点 25 分出发去宾馆。
编写Python程序,统计接送n个参会者所需最少车辆数,程序运行如下图:

(1)如图所示,如果每辆车最多接送 4 人,每个参会者的等待时间不超过 10 分钟,接送所有到 A 宾馆的参会者最少需要________辆车。
(2)请完善程序划线处代码。
a = ["A-08:03", "A-08:38", "A-08:41", "A-08:45", "A-08:46", "A-08:46", "B-08:01", "B-08:02", "B-08:05", "B-08:12"]n =len(a)v =4w =10def get_dif(ts1, ts2):h1, m1 =map(int, ts1.split(':'))h2, m2 =map(int, ts2.split(':'))return (h2 *60+ m2) - (h1 *60+ m1)def get_cnt(first, last):p = firstk =1s1 = a[first][2:]for i inrange(first +1, last +1):s2 = a[i][2:]t = get_dif(s1, s2)if ___①___:k +=1p = i___②___return kdef proc():if n ==0:print(0)returntotal =0j =0for i inrange(1, n):if a[i][0] != a[j][0]:total += ___③___j = itotal += get_cnt(j, n -1)print(total)
【解析】
·第(1)问答案为 3 辆。
·填空①应为 i - p + 1 > v or t > w。当人数超出上限,或当前人与本车最早到达者的时间差超过 w 时,就必须另起一辆车。
·填空②应为 s1 = s2,表示新车以当前参会者的到达时间作为新的起点时间。
·填空③应为 get_cnt(j, i - 1),在宾馆分组发生变化时统计上一组所需车辆数。
六、其他有价值的题目
无
更多文章:
一:真题回顾系列:
【真题回顾•第一期】2015年10月浙江省信息技术选考真题Python改编
【真题回顾•第二期】2016年04月浙江省信息技术选考真题Python改编
【真题回顾•第三期】2016年10月浙江省信息技术选考真题Python改编
【真题回顾•第四期】2017年04月浙江省信息技术选考真题Python改编
【真题回顾•第五期】2017年11月浙江省信息技术选考真题Python改编
【真题回顾•第六期】2018年04月浙江省信息技术选考真题Python改编
【真题回顾•第七期】2018年11月浙江省信息技术选考真题Python改编
二:2026年各地联盟压轴题详细图示解析:
三:近7次新教材压轴题图示解析: