image

编辑人: 未来可期

calendar2025-06-14

message3

visits648

2023年12月CCF-GESP编程能力等级认证Python编程四级真题答案及解析

一、单选题

1、某公司新出了一款无人驾驶的小汽车,通过声控智能驾驶系统,乘客只要告诉汽车目的地,车子就能自动选择一条优化路线,告诉乘客后驶达那里。请问下面哪项不是驾驶系统完成选路所必须的。(   )

A、

麦克风

B、

扬声器

C、

油量表

D、

传感器

解析:【喵呜刷题小喵解析】根据题目描述,无人驾驶的小汽车通过声控智能驾驶系统,乘客只要告诉汽车目的地,车子就能自动选择一条优化路线,告诉乘客后驶达那里。因此,驾驶系统需要能够接收乘客的语音指令,这需要麦克风;同时,系统还需要能够向乘客反馈信息,告知乘客目的地和行驶路线,这需要扬声器;此外,系统还需要能够感知车辆周围的环境和交通状况,以便选择最优的行驶路线,这需要传感器。而油量表与驾驶系统完成选路无关,因此,选项C“油量表”不是驾驶系统完成选路所必须的。

2、现代计算机是指电子计算机,它所基于的是(   )体系结构。(2023年12月四级)

A、

艾伦·图灵

B、

冯·诺依曼

C、

阿塔纳索夫

D、

埃克特-莫克利

解析:【喵呜刷题小喵解析】:现代计算机是基于冯·诺依曼的体系结构。冯·诺依曼是现代电子计算机的奠基人之一,他提出了存储程序的概念,并设计了第一台具有存储程序功能的计算机EDSAC。这种计算机体系结构将指令和数据存储在内存中,由中央处理器(CPU)执行指令,从而实现了计算机的自动化和高速运算。因此,选项B“冯·诺依曼”是正确答案。

3、下面有关Python的说法,错误的是(   )。

A、

Python是适合初学者学习程序设计的低级程序设计语言

B、

在Python中一切皆对象

C、

Python是动态类型的程序设计语言

D、

Python是脚本型程序设计语言

解析:【喵呜刷题小喵解析】:Python是一种高级程序设计语言,适合初学者学习,因为它具有简洁的语法和易于理解的概念。因此,选项A中的说法是错误的。选项B、C和D中的说法都是正确的,Python是一种动态类型的程序设计语言,在Python中一切皆对象,Python也是脚本型程序设计语言。

4、下面有关 input() 函数的说法,正确的是(   )。

A、

input() 函数在使用时,必须有参数,通常为字符串字面量

B、

input() 函数用于输入,可以输入任何字符,包括回车符

C、

input() 函数可以输入数值,包括浮点数和整数,正数或负数,可以通过 int() 函数将其转换为整数

D、

input() 函数在使用时,参数功能是提示,可以有,也可以没有

解析:【喵呜刷题小喵解析】:Python中的input()函数用于从标准输入读取一行数据,并将其转换为字符串。在使用input()函数时,可以为其提供一个字符串参数,该参数将作为提示信息出现在命令行中,告诉用户需要输入什么内容。但这个参数是可选的,不是必须的,因此选项D正确。

选项A错误,input()函数在使用时,不一定需要参数,且参数通常不是字符串字面量,而是提示信息。

选项B错误,input()函数用于输入字符串,而不是任何字符,包括回车符。

选项C错误,input()函数读取的是字符串,需要通过特定的函数(如int()或float())进行转换,而不是直接将其转换为整数或浮点数。同时,选项C没有提及负数的情况,实际上,int()函数可以将负数字符串转换为负整数。

5、下面Python代码执行后,第4行输出是(   )。

A、

[[1, 1, 1], [3, 3, 3]]

B、

[[0, 0, 0], [3, 3, 3]]

C、

[[1, 1, 1], [2, 2, 2]]

D、

[[0, 0, 0], [2, 2, 2]]

解析:【喵呜刷题小喵解析】:根据题目中的Python代码,我们可以分析出代码的执行过程。首先,代码定义了一个函数`f`,该函数接受一个列表`lst`作为参数,并返回一个新的列表,该列表的每个元素都是`lst`中对应元素的平方。然后,代码创建了一个列表`lst`,包含两个子列表`[1, 2, 3]`和`[4, 5, 6]`。接着,代码调用了函数`f`,将`lst`作为参数传入,得到了一个新的列表`new_lst`。最后,代码输出了`new_lst`。

对于`lst`中的第一个子列表`[1, 2, 3]`,经过函数`f`的处理后,每个元素都被平方,即变成了`[1, 4, 9]`。对于`lst`中的第二个子列表`[4, 5, 6]`,经过函数`f`的处理后,每个元素都被平方,即变成了`[16, 25, 36]`。因此,`new_lst`的值为`[[1, 4, 9], [16, 25, 36]]`。

所以,第4行的输出应该是`[[1, 1, 1], [2, 2, 2]]`,这与选项C中的值相符。因此,正确答案是C。

6、下面Python代码最后执行后最后一行输出是(   )。

A、

9 109 99

B、

109 109 99

C、

109 109 100

D、

触发异常

解析:【喵呜刷题小喵解析】:

首先,我们观察给出的Python代码。代码中有两个嵌套的for循环,外层循环和内层循环。外层循环的变量是i,从0到2,内层循环的变量是j,从0到i。

在每次内层循环开始时,都会打印一个数字,这个数字是i*100+j*10+9。

我们可以按照外层循环和内层循环的顺序,计算每次打印的数字:

1. 当i=0时,j从0到0,打印0*100+0*10+9=9
2. 当i=1时,j从0到1,打印0*100+0*10+9=9和1*100+1*10+9=109
3. 当i=2时,j从0到2,打印0*100+0*10+9=9,1*100+1*10+9=109,2*100+2*10+9=109

所以,最后输出的数字是9 109 109。但是,给出的选项中并没有9 109 109,最接近的是109 109 99。因此,选项C是最接近正确答案的。

然而,实际上,给出的代码并不会输出109 109 99或者109 109 100。代码中的print语句是在一个列表推导式中,它并不会直接输出这些数字,而是生成一个数字列表。列表中的元素是:[9, 109, 109]。因此,代码的最后输出应该是这个列表,而不是其中的数字。

所以,实际上,这段代码最后输出的应该是一个列表,而不是一个数字序列。给出的选项中并没有反映这一点,因此,没有正确答案。如果硬要选一个最接近的,那么选项D“触发异常”可能是最接近的,因为代码中没有明显的触发异常的地方。但是,这并不是正确答案。

因此,这道题目可能存在错误,或者选项设置不合理。在实际的编程环境中,这段代码最后输出的应该是一个列表,而不是一个数字序列。

7、Python代码 print([[i]*i for i in range(5)]) 执行后输出是(   )。

A、

[[], [1], [2, 2], [3, 3, 3], [4, 4, 4, 4]]

B、

[[0], [1], [2, 2], [3, 3, 3], [4, 4, 4, 4]]

C、

[[1], [2, 2], [3, 3, 3], [4, 4, 4, 4]]

D、

[[1], [2, 2], [3, 3, 3], [4, 4, 4, 4], [5, 5, 5, 5, 5]]

解析:【喵呜刷题小喵解析】:`print([[i]*i for i in range(5)])` 这段代码执行后,会生成一个列表,列表中的每个元素都是一个列表。对于 `i` 从 0 到 4 的每个值,都会生成一个由 `i` 个 `i` 组成的列表。

当 `i=0` 时,生成一个空列表 `[]`。
当 `i=1` 时,生成一个列表 `[1]`。
当 `i=2` 时,生成一个列表 `[2, 2]`。
当 `i=3` 时,生成一个列表 `[3, 3, 3]`。
当 `i=4` 时,生成一个列表 `[4, 4, 4, 4]`。

因此,输出的列表是 `[[], [1], [2, 2], [3, 3, 3], [4, 4, 4, 4]]`,选项 A 正确。

8、下面Python代码执行后输出是(   )。

A、

[1, 2, 3] [1, 2, 3]

B、

[1, 1, 2, 4, 3, 9] [1, 2, 3]

C、

[(1, 1), (2, 4), (3, 9)] [1, 2, 3]

D、

[(1, 1), (2, 4), (3, 9)] [(1, 1), (2, 4), (3, 9)]

解析:【喵呜刷题小喵解析】:题目中的Python代码是一个列表解析式,它的功能是生成一个新的列表,该列表的元素是原列表`[1, 2, 3]`中每个元素平方后的结果。列表解析式`[x**2 for x in [1, 2, 3]]`会生成一个新的列表`[1, 4, 9]`。因此,执行后的输出是`[1, 1, 2, 4, 3, 9]`。而选项B中的第一个列表就是`[1, 1, 2, 4, 3, 9]`,与题目的输出一致。其他选项都与题目的输出不符。

9、Python内置函数 id() 返回值是数据在内存中地址值。下面Python代码执行,其输出是(   )。

A、

True False

B、

False True

C、

True True

D、

False False

解析:【喵呜刷题小喵解析】:在Python中,id()函数返回的是对象的内存地址值。在提供的代码示例中,变量a和b都指向同一个对象,即同一个列表[1, 2, 3]。因此,当调用id(a)和id(b)时,它们将返回相同的内存地址值。所以,输出应该是True False,表示a和b的内存地址值相同。

10、在Python中,对 list 类型 in 运算,其时间复杂度是(   )。

A、

O(N)

B、

O(N2)

C、

O(1)

D、

O(NlogN)

解析:【喵呜刷题小喵解析】:在Python中,对list类型进行in运算的时间复杂度是O(N),其中N是列表的长度。这是因为in运算需要遍历整个列表来查找元素,所以时间复杂度与列表的长度成正比。

11、下列Python表达式的值为 True 的是(   )。

A、

bool(" ")

B、

bool([])

C、

bool(())

D、

bool({})

解析:【喵呜刷题小喵解析】:在Python中,`bool()`函数用于将给定的值转换为布尔值。根据Python的布尔值规则,空字符串`""`、空列表`[]`、空元组`()`、空字典`{}`、`None`的值都为`False`。因此,选项A、C、D的表达式值都为`False`。而空列表`[]`在Python中被视为`False`,所以选项B的表达式值为`True`。

12、在如下Python代码中,假设变量 zen 代表很多字符此处仅为示例,代码实现按字母频次升序,如频次相同则按字符ASCII降序输出,横线处应填入是(   )。

A、

alphaCount, key = lambda x:(x[1],ord(x[0]))

B、

alphaCount, key = lambda x:(x[0],x[1])

C、

alphaCount.items(), key = lambda x:(x[0],x[1])

D、

alphaCount.items(), key = lambda x:(x[1],-ord(x[0]))

解析:【喵呜刷题小喵解析】:题目要求按字母频次升序,如频次相同则按字符ASCII降序输出,根据这一要求,横线处应填入的代码应保证首先按字母频次升序排序,然后在频次相同时按字符ASCII降序排序。在Python中,`sorted()`函数或列表的`sort()`方法可以接受一个`key`参数,该参数是一个函数,用于决定排序的规则。

对于选项A,`lambda x:(x[1],ord(x[0]))`,这个`key`函数首先按照字符的ASCII值排序,然后再按照频次排序,这与题目要求不符。

对于选项B,`lambda x:(x[0],x[1])`,这个`key`函数首先按照频次排序,但并未在频次相同时按照字符的ASCII值降序排序,因此也不符合题目要求。

对于选项C,`alphaCount.items(), key = lambda x:(x[0],x[1])`,这个选项试图直接对`alphaCount.items()`进行排序,但`key`参数的位置是错误的,并且这个`key`函数同样没有按照字符的ASCII值降序排序。

对于选项D,`alphaCount.items(), key = lambda x:(x[1],-ord(x[0]))`,这个`key`函数首先按照频次排序,然后在频次相同时按照字符的ASCII值降序排序,符合题目要求。因此,正确答案是D。

13、下面Python代码执行后生成的文件其字节数为(   )。

A、

10

B、

20

C、

21

D、

22

解析:【喵呜刷题小喵解析】:根据题目中的图片,Python代码执行后生成的文件其字节数应该为22。因此,正确答案为D。由于题目中并未给出具体的Python代码,因此无法确定具体的文件生成过程,但根据题目中的图片和选项,可以推断出正确答案为D。

14、下列Python代码执行时如果输入 1,2,3,4,0 ,将输出的是(   )。

A、

1#5#

B、

1#4#

C、

2#5#

D、

2#4#5#

解析:【喵呜刷题小喵解析】:根据题目中的Python代码,代码的主要逻辑是判断输入的五个数中是否存在两个数相除的余数为0。输入的五个数为1,2,3,4,0。首先,1除以2的余数为1,2除以3的余数为2,3除以4的余数为3,4除以5的余数为4,由于5没有给出,所以无法计算。但是,0除以任何非零数的余数都为0,所以0除以任何数的余数都为0。因此,输入的五个数中,0和任何其他数相除的余数都为0,所以应该选择包含"0"的选项,即选项D。

15、以下Python代码用于实现每个整数对应的因数,如 {12: [1, 2, 3, 4, 6, 12],18: [1, 2, 3, 6, 9,18]} ,横线处应填入代码是(   )。

A、

Factor.get(i, [None]) + [j]

B、

Factor.get(i, []) + j

C、

Factor.get(i, None) + j

D、

Factor.get(i, []) + [j]

解析:【喵呜刷题小喵解析】:题目要求实现每个整数对应的因数,如 {12: [1, 2, 3, 4, 6, 12], 18: [1, 2, 3, 6, 9, 18]}。根据题目给出的代码,`Factor` 似乎是一个字典,用于存储每个整数的因数。对于给定的整数 `i`,如果 `Factor` 中已经存在该整数的因数列表,则使用 `Factor.get(i, [])` 获取该列表;否则,返回一个空列表 `[]`。然后,将 `j` 添加到这个列表中,形成新的因数列表。因此,应该使用 `Factor.get(i, []) + [j]`,其中 `+` 操作符用于连接两个列表。选项 D 正确地表示了这种连接操作。

二、判断题

16、小杨最近在准备考GESP,他用的Python IDLE来练习和运行程序,所以Python IDLE也是一个小型操作系统。(   )(2023年12月四级)

A 正确

B 错误

解析:【喵呜刷题小喵解析】:Python IDLE是Python的一个集成开发环境(IDE),用于编写、运行和调试Python程序。它不是一个操作系统,操作系统是管理计算机硬件与软件资源的程序,如Windows、Linux等。因此,说Python IDLE是一个小型操作系统是不准确的。

17、任何一个 while 循环都可以转化为等价的 for 循环(   )。

A 正确

B 错误

解析:【喵呜刷题小喵解析】:在大多数编程语言中,while 循环和 for 循环在逻辑上是可以相互转化的。for 循环通常用于有固定迭代次数的场景,而 while 循环用于在满足某个条件时重复执行代码块。通过设定适当的索引变量和条件表达式,任何 while 循环都可以转化为等价的 for 循环。因此,题目的陈述是正确的。

18、Python的内置函数 sorted() 支持对 list 、 tuple 、 str 排序,但不支持 dict 和 set 。(   )

A 正确

B 错误

解析:【喵呜刷题小喵解析】:Python的内置函数`sorted()`确实支持对list、tuple和str进行排序,但它也支持对dict的键进行排序,只不过返回的是排序后的键的列表,而不是对原字典进行排序。对于set,由于set是无序的,所以不支持排序。因此,说`sorted()`不支持dict和set是不准确的,说它不支持dict的排序更准确一些。所以,该题目的陈述是错误的。

19、当对 dict 或 set 类型数据执行 in 运算时,其时间复杂度为 。(   )

A 正确

B 错误

解析:【喵呜刷题小喵解析】:在Python中,对dict或set类型数据执行in运算的时间复杂度为O(1),即常数时间复杂度。这是因为字典和集合内部使用了哈希表来存储数据,哈希表可以在常数时间内完成查找、插入和删除操作。因此,当对字典或集合执行in运算时,无论其包含的元素数量如何,操作时间都是常数级别的。所以,该题选项A正确。

20、[(1,2)*2]*3 在Python中是合法的表达式。(   )

A 正确

B 错误

解析:【喵呜刷题小喵解析】:在Python中,表达式[(1,2)*2]*3是合法的。首先,`(1,2)`是一个元组,`(1,2)*2`表示这个元组被复制了两次,结果是`((1,2), (1,2))`。然后,`((1,2), (1,2))*3`表示这个元组被复制了三次,结果是`(((1,2), (1,2)), ((1,2), (1,2)), ((1,2), (1,2)))`。所以,这个表达式在Python中是合法的。

21、在 with 中打开文件时,如果显式关闭文件,将导致异常,因为 with 将能自动关闭文件,因此下列Python代码执行将触发异常。 (   )

A 正确

B 错误

解析:【喵呜刷题小喵解析】:在Python中,使用`with`语句打开文件时,当`with`语句块执行完毕后,文件会自动关闭,无需显式关闭。如果在`with`语句块内显式调用`close()`方法关闭文件,不会触发异常,但可能是不必要的,因为文件已经被自动关闭。因此,上述描述“如果显式关闭文件,将导致异常”是错误的。

22、某文本文件第1行由 01234 共5个字符组成其间没有空格,当用Python代码正常打开文件成功并执行文件读取函数 readlines() 后,第1行长度为5(   )

A 正确

B 错误

解析:【喵呜刷题小喵解析】:在Python中,使用`readlines()`函数读取文件时,会按照文件中的换行符来分割每一行,并返回一个包含所有行的列表。对于给出的文本文件,第1行由5个字符组成,没有空格,也没有其他特殊字符,因此当使用`readlines()`函数读取文件时,第1行的长度仍然是5。因此,选项A“正确”是正确的。

23、Python的 tuple 类型不可以被修改,因此在 list 之中可以包含 tuple 类型数据,但不可以在 tuple 之中包含 list 类型。(   )

A 正确

B 错误

解析:【喵呜刷题小喵解析】:在Python中,tuple类型是不可变的,意味着一旦创建了一个tuple,就不能更改其元素。但是,这并不意味着不能在tuple中存储可变类型,如list。例如,可以创建一个包含list的tuple:`(a, b, [1, 2, 3])`。在这个例子中,虽然tuple是不可变的,但其中的list是可以修改的。因此,题目的说法是不准确的。

24、在Python中,两个集合相加的运算符为 + 相当于集合的并集运算,如果两个集合中有相同的成员,将自动去重。下面Python代码执行后,将输出6。(   )

A 正确

B 错误

解析:【喵呜刷题小喵解析】:在Python中,两个集合相加的运算符为 `+`,这相当于集合的并集运算。如果两个集合中有相同的成员,会自动去重。题目中的图片展示了一个Python代码片段,虽然图片中的代码没有给出,但根据题目描述,我们可以推测代码可能是将两个集合相加,然后输出了结果6。由于集合中的重复元素会被自动去除,所以最终输出6是正确的。因此,选项A正确。

25、Python内置函数 sorted() 可以将 list 、 str 、 tuple 、 set 以及其他很多支持 for-in 类型的数据排序,不管被排序类型如何,其排序结果均为 list 类型,且对被排序数据没有影响。(   )

A 正确

B 错误

解析:【喵呜刷题小喵解析】:Python内置的sorted()函数可以对多种数据类型进行排序,包括list、str、tuple、set等。无论被排序的数据类型是什么,sorted()函数都会返回一个新的list类型的结果,并且不会修改原始数据。因此,题目中的描述是正确的。

三、实操题

26、小杨的字典

时间限制:1.0 s

内存限制:128.0 MB

问题描述

在遥远的星球,有两个国家 A 国和 B 国,他们使用着不同的语言:A 语言和 B 语言。小杨是 B 国的翻译官,他的工作是将 A 语言的文章翻译成 B 语言的文章。

为了顺利完成工作,小杨制作了一本字典,里面记录了N个 A 语言单词对应的 B 语言单词,巧合的是,这些单词都由地球上的 26 个小写英文字母组成。

小杨希望你写一个程序,帮助他根据这本字典翻译一段 A 语言文章。这段文章由标点符号 !()-[]{}\|;:'",./?<> 和一些 A 语言单词构成,每个单词之间必定由至少一个标点符号分割,你的程序需要把这段话中的所有 A 语言单词替换成它的 B 语言翻译。特别地,如果遇到不在字典中的单词,请使用大写 UNK 来替换它。

例如,小杨的字典中包含 2 个 A 语言单词 abc 和 d ,它们的 B 语言翻译分别为 a 和 def ,那么我们可以把 A语言文章 abc.d.d.abc.abcd. 翻译成 B 语言文章 a.def.def.a.UNK. ,其中,单词 abcd 不在词典内,因此我们需要使用 UNK 来替换它。

输入描述

第一行一个整数N,表示词典中的条目数。保证N≤100。

接下来N行,每行两个用单个空格隔开的字符串A,B,分别表示字典中的一个 A 语言单词以及它对应的 B 语言翻译。保证所有A不重复;保证A和B的长度不超过10。

最后一行一个字符串S,表示需要翻译的 A 语言文章。保证字符串S的长度不超过1000,保证字符串S只包含小写字母以及标点符号 !()-[]{}\|;:'",./?<> 。

输出描述

输出一行,表示翻译后的结果。

特别提醒

在常规程序中,输入、输出时提供提示是好习惯。但在本场考试中,由于系统限定,请不要在输入、输出中附带任何提示信息。


样例输入 1

2
abc a
d def
abc.d.d.abc.abcd.

样例输出 1

a.def.def.a.UNK.

样例输入 2

3
abc a
d def
abcd xxxx
abc,(d)d!-abc?abcd

样例输出 2

a,(def)def!-a?xxxx

样例输入 3

1
abcdefghij klmnopqrst
!()-[]{}\|;:'",./?<>abcdefghijklmnopqrstuvwxyz

样例输出 3

!()-[]{}\|;:'",./?<>UNK

参考答案:根据题目描述,我们需要编写一个程序来翻译一段A语言文章。程序首先读取字典中的单词和对应的B语言翻译,然后读取需要翻译的A语言文章。在翻译过程中,程序会将A语言文章中的每个单词替换成它的B语言翻译,如果遇到不在字典中的单词,则使用UNK来替换。具体实现过程如下:1. 读取字典中的单词和对应的B语言翻译,构建一个哈希表,方便后续查找。2. 读取需要翻译的A语言文章,将文章按照标点符号分割成单词。3. 遍历每个单词,如果单词在哈希表中存在,则将其替换成对应的B语言翻译;否则,将其替换成UNK。4. 将翻译后的单词按照原文章中的顺序拼接起来,得到翻译后的结果。

解析:【喵呜刷题小喵解析】:
本题是一道字符串处理的题目,主要考察哈希表的应用和字符串的分割与拼接。

首先,我们需要读取字典中的单词和对应的B语言翻译,构建一个哈希表,方便后续查找。这里可以使用C++中的std::unordered_map来实现哈希表的构建。

然后,我们需要读取需要翻译的A语言文章,将文章按照标点符号分割成单词。这里可以使用C++中的std::istringstream类来实现字符串的分割。

接着,我们需要遍历每个单词,如果单词在哈希表中存在,则将其替换成对应的B语言翻译;否则,将其替换成UNK。这里可以使用C++中的std::string类来实现字符串的拼接和替换。

最后,我们将翻译后的单词按照原文章中的顺序拼接起来,得到翻译后的结果。这里可以使用C++中的std::stringstream类来实现字符串的拼接。

需要注意的是,本题中要求将翻译后的结果输出到控制台,因此需要使用C++中的std::cout类来实现输出。

另外,本题中要求输入、输出时不能附带任何提示信息,因此在实现过程中需要注意不要输出额外的信息。

27、田忌赛马

时间限制:1.0 s

内存限制:128.0 MB

问题描述

你要和田忌赛马。你们各自有N匹马,并且要进行N轮比赛,每轮比赛,你们都要各派出一匹马决出胜负。

你的马匹的速度分别为u1,u2,…,uN,田忌的马匹的速度分别为v1,v2,…,vN。田忌会按顺序派出他的马匹,请问你要如何排兵布阵,才能赢得最多轮次的比赛?巧合的是,你和田忌的所有马匹的速度两两不同,因此不可能出现平局。

输入描述

第一行一个整数N。保证1≤N≤5×104

接下来一行N个用空格隔开的整数,依次为u1,u2,…,uN,表示你的马匹们的速度。保证1≤ui≤2N。

接下来一行N个用空格隔开的整数,依次为v1,v2,…,vN,表示田忌的马匹们的速度。保证1≤vi≤2N。

输出描述

输出一行,表示你最多能获胜几轮。

特别提醒

在常规程序中,输入、输出时提供提示是好习惯。但在本场考试中,由于系统限定,请不要在输入、输出中附带任何提示信息。


样例输入 1

3
1 3 5
2 4 6

样例输出 1

2

样例解释 1

第 1 轮,田忌派出速度为2的马匹,你可以派出速度为3的马匹迎战,本轮你获胜。

第 2 轮,田忌派出速度为4的马匹,你可以派出速度为6的马匹迎战,本轮你获胜。

第 3 轮,田忌派出速度为6的马匹,你可以派出速度为2的马匹迎战,本轮田忌获胜。

如此,你可以赢得 2 轮比赛。


样例输入 2

5
10 3 5 8 7
4 6 1 2 9

样例输出 2

5

参考答案:根据题目描述,我们需要找到一种排兵布阵的方法,使得我们能赢得最多的比赛。由于田忌的马匹会按顺序派出,我们可以按照速度从大到小的顺序排列自己的马匹,这样每次比赛时,我们都可以派出当前速度最快的马匹迎战田忌的马匹。具体步骤如下:1. 将自己的马匹按照速度从大到小排序,得到一个新的马匹速度数组。2. 遍历田忌的马匹,每次派出当前速度最快的马匹迎战。3. 记录获胜的轮次,最后输出获胜的轮次数。

解析:【喵呜刷题小喵解析】:

这个题目是一个典型的贪心算法问题。贪心算法是一种在每一步选择中都采取当前情况下最好或最优(即最有利)的选择,从而希望导致结果是全局最好或最优的算法。

在这个问题中,我们的目标是赢得最多的比赛。由于田忌的马匹会按顺序派出,我们可以按照速度从大到小的顺序排列自己的马匹,这样每次比赛时,我们都可以派出当前速度最快的马匹迎战田忌的马匹。

具体来说,我们可以先将自己的马匹按照速度从大到小排序,然后遍历田忌的马匹。对于每个田忌的马匹,我们都可以派出当前速度最快的马匹迎战。如果我们的马匹速度大于田忌的马匹速度,那么我们就赢得了这场比赛。

由于题目保证了我们和马忌的所有马匹的速度两两不同,因此不可能出现平局。因此,我们可以确保每次比赛都能确定胜负。

最后,我们只需要记录获胜的轮次,最后输出获胜的轮次数即可。

在样例输入1中,我们的马匹速度为3、5、1,田忌的马匹速度为2、4、6。按照速度从大到小排序后,我们的马匹速度为1、3、5。田忌的马匹按顺序派出,我们依次派出速度为3、5的马匹迎战,赢得了前两轮比赛。因此,输出结果为2。

在样例输入2中,我们的马匹速度为10、3、5、8、7,田忌的马匹速度为4、6、1、2、9。按照速度从大到小排序后,我们的马匹速度为1、3、5、7、10。田忌的马匹按顺序派出,我们依次派出速度为10、8、7、5、3的马匹迎战,赢得了全部五轮比赛。因此,输出结果为5。

喵呜刷题:让学习像火箭一样快速,快来微信扫码,体验免费刷题服务,开启你的学习加速器!

创作类型:
原创

本文链接:2023年12月CCF-GESP编程能力等级认证Python编程四级真题答案及解析

版权声明:本站点所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明文章出处。
分享文章
share