GESP2024年12月Python五级试卷

从PDF导入:GESP2024年12月Python五级试卷

Python 180分钟 总分 100.0 27 题
试卷题目预览
第1题 中级 2.0分 单选
下面的程序中,x,y都是正整数,完成的算法是( )

def chenadai(x, y):
while y:
x, y = y, x % y
return x

A. 最小公倍数
B. 最大公约数
C. 数字x能够整除y的最小数
D. 数字x与数字y的所有公约数
第2题 中级 2.0分 单选
下列程序中实现的是( )

def chenadai(x, y):
return x * y // (x,y的最大公约数)

A. 实现了求x,y的最小公约数
B. 实现了求x,y的最大公约数
C. 实现了求x,y的最小公倍数
D. 实现了求x,y的平均值
第3题 中级 2.0分 单选
欧几里得算法又称作辗转相除算法,下面程序中是这种算法的是( )
A.
B.
C.
D.
第4题 中级 2.0分 单选
下列程序是二分法的程序,横线处应该填上( )

def binary_search(arr, target):
left = 0
right = len(arr) - 1
while left <= right:
mid = (left + right) // 2
_________________________
return -1

A. if arr[mid]==target: return mid; elif arr[mid]>target: right=mid-1
B. if arr[mid]==target: return mid; elif arr[mid]>target: right=mid; else: left=mid
C. if arr[mid]==target: return mid; elif arr[mid]>target: right=mid-1; else: left=mid+1
D. if arr[mid]==target: return mid; else: left=mid+1
第5题 中级 2.0分 单选
下面折半查找程序的时间复杂度为( )

A. O(n)
B. O(n²)
C. O(log n)
D. O(1)
第6题 中级 2.0分 单选
下列程序中,使用了埃氏筛法,横线处应该填写的是( )

def aishishai(n):
if n < 2:
return []
prime = [True] * (n + 1)
prime[0] = prime[1] = False
————————————————————————————————
if prime[p]:
for i in range(p * p, n + 1, p):
prime[i] = False
return [p for p in range(n + 1) if prime[p]]

A. for p in range(2, n ** 0.5 + 1):
B. for p in range(2, int(n ** 0.5) + 1):
C. for p in range(2, int(n ** 0.5) + 0.5):
D. for p in range(2, n ** 0.5 + 0.5):
第7题 中级 2.0分 单选
18到100之间的所有素数的和为多少?( )
A. 1060
B. 1004
C. 1002
D. 1052
第8题 中级 2.0分 单选
下面程序是对2024进行唯一分解,最后的结果应该是( )。

def weiyi(n):
factors = {}
for i in range(2, n+1):
while n % i == 0:
if i in factors:
factors[i] += 1
else:
factors[i] = 1
n //= i
return factors

A. 1,2,3,13,23
B. 2,7,11,23
C. 2:3,11:1,23:1
D. 2,3,13,23
第9题 中级 2.0分 单选
下面关于循环链表的说法正确的是( )。
A. 循环链表的最后一个结点指向头结点,形成一个闭环
B. 必须通过特定结点才可以遍历整个链表
C. 不属于链式存储结构
D. 在长度为n的顺序表下标为i的位置前插入一个元素,元素的移动次数为n-i+1
第10题 中级 2.0分 单选
下列归并算法程序中,横线处应该填入的是( )

def merge_sort(array):
if len(array) == 1:
return array
_________________________
return merge(left, right)
def merge(left, right):
left_index, right_index, merge_array = 0, 0, list()
while left_index < len(left) and right_index < len(right):
if left[left_index] <= right[right_index]:
merge_array.append(left[left_index])
left_index += 1
else:
merge_array.append(right[right_index])
right_index += 1
merge_array = merge_array + left[left_index:] + right[right_index:]
return merge_array

A. left=merge_sort(array[:len(array)-1//2]); right=merge_sort(array[len(array)-1//2:])
B. left=merge_sort(array[len(array)//2-1]); right=merge_sort(array[len(array)//2:])
C. left=merge_sort(array[len(array)//2-1]); right=merge_sort(array[len(array)//2])
D. left=merge_sort(array[:len(array)//2]); right=merge_sort(array[len(array)//2:])
第11题 中级 2.0分 单选
关于算法复杂度,下列说法不正确的是( )
A. 简单的for循环的时间复杂度是O(n)
B. 归并排序的时间复杂度是O(n log n)
C. 选择排序中的内循环时间复杂度是O(n)
D. 递归的Fibonacci数列计算时间复杂度是O(n)
第12题 中级 2.0分 单选
下列程序中,实现了16进制转到8进制。横线处应该填入的是( )

def dec_conversion_n(n, base):
str_list = "0123456789ABCDEF"
if n < base:
return str_list[n]
else:
___________________________

A. return dec_conversion_n(n//base, base) + str_list[n%base]
B. return dec_conversion_n(n//base, n) + str_list[n%base]
C. return dec_conversion_n(n//base, base) + str_list[n//base]
D. return dec_conversion_n(n//base, n) + str_list[n//base]
第13题 中级 2.0分 单选
水仙花数是指一个3位数,它的每个数位上的数字的3次幂之和等于它本身。下面代码是计算100到n之间有多少个水仙花数的程序,横线处应该填写的是( )

n = int(input("输入一个正整数N:"))
sum = 0
for i in range(100,n+1):
_______________________
print(sum)

A. ge=i%10; shi=i//10%10; bai=i//100; if i==ge**3+shi**3+bai**3: sum+=1
B. ge=i%10; shi=i%10%10; bai=i//100; if i==ge**3+shi**3+bai**3: sum+=1
C. ge=i%10; shi=i//10%10; bai=i%100; if i==ge**3+shi**3+bai**3: sum+=1
D. ge=i%10; shi=i%10%10; bai=i%100; if i==ge**3+shi**3+bai**3: sum+=1
第14题 中级 2.0分 单选
下面程序输出的是( )

def func(x):
if x%2 == 1:
return x+1
else:
return func(x-1)
print(func(9))
print(func(6))

A. 10, 6
B. 9, 6
C. 10, 7
D. 9, 7
第15题 中级 2.0分 单选

旋转数组是一种常见的数据结构问题,通常是指一个有序数组经过旋转后,使得所有元素逆序排列。整数数组 nums 按升序排列,数组中的值互不相同。在预先未知的某个下标 k(0 <= k < nums.length)上进行了旋转,使数组变为 [nums[k], nums[k + 1],..., nums[n - 1], nums[0], nums[1],..., nums[k - 1]](下标从 0 开始计数)。现在给定旋转后的数组 nums 和一个整数 target,如果 nums 中存在这个目标值 target,则返回它的下标,否则返回-1。下面程序中()处应填入的程序是:例如,给定一个数组 [4,5,6,7,0,1,2],它可能经过旋转变为 [0,1,2,4,5,6,7]。二分查找算法搜索旋转排序数组的程序,下面横线中,应填入的一行或多行代码是( )
def search(nums, target):
left, right = 0, len(nums) - 1
while left <= right:
mid = (left + right) // 2
if nums[mid] == target:
return True
if nums[mid] > nums[right]:
if nums[mid] > target or nums[left] <= target:
right = mid - 1
else:
left = mid + 1
elif nums[mid] < nums[right]:
___________________________
else:
right -= 1
return False

A. if nums[mid]=target: left=mid-1; else: right=mid+1
B. if nums[mid-1]=target: left=mid+1; else: right=mid-1
C. if nums[mid]=target: left=mid; else: right=mid
D. if nums[mid]=target: left=mid+1; else: right=mid-1
第16题 中级 2.0分 判断
两个整数的最大公约数等于其中较小的那个数和两数相除余数的最大公约数。( )
T. 正确
F. 错误
第17题 中级 2.0分 判断
任何一个大于1的自然数都可以分解成若干个不同的质数的乘积,且分解方式是唯一的。( )
T. 正确
F. 错误
第18题 中级 2.0分 判断
要得到不大于某个自然数N的所有素数,只要在2至N中将不大于√N的素数的倍数全部划去即可。( )
T. 正确
F. 错误
第19题 中级 2.0分 判断
任何一个大于1的自然数,要么所有质因子都小于等于√n,要么只有一个质因子大于√n,其余质因子都小于√n。( )
T. 正确
F. 错误
第20题 中级 2.0分 判断
贪心算法的空间复杂度通常是O(1)。( )
T. 正确
F. 错误
第21题 中级 2.0分 判断
归并排序的空间复杂度为O(n)。( )
T. 正确
F. 错误
第22题 中级 2.0分 判断
时间复杂度对比:O(1) < O(log n) < O(n) < O(n log n) < O(n²)。( )
T. 正确
F. 错误
第23题 中级 2.0分 判断
对于任意整数a, b, m,(a+b)%m = ((a%m)+(b%m))%m。( )
T. 正确
F. 错误
第24题 中级 2.0分 判断
下列程序输出的是21。( )

def digui(n):
if n <= 1:
return n
else:
return digui(n-1) + digui(n-2)
print(digui(8))

T. 正确
F. 错误
第25题 中级 2.0分 判断
CCF(十六进制) = 1653(十三进制)。( )
T. 正确
F. 错误
第26题 中级 25.0分 编程
奇妙数字

时间限制:1.0 s
内存限制:512.0 MB
题面描述
小杨认为一个数字x是奇妙数字当且仅当x=p^k,其中p为任意质数且k为正整数。对于一个正整数n,小杨想要构建一个包含若干个奇妙数字的集合S,使其满足:集合中不包含相同的数字;S中所有数字的乘积是n的因子。小杨希望集合包含的奇妙数字尽可能多,请你帮他计算出满足条件的集合最多包含多少个奇妙数字。

【输入格式】
第一行包含一个正整数n,含义如题面所示。
【输出格式】
输出一个正整数,代表满足条件的集合最多包含多少个奇妙数字。
【样例】
样例输入
128
样例输出
3
数据范围
对于全部数据,保证有1 ≤ n ≤ 10¹²。
第27题 中级 25.0分 编程
武器强化

时间限制:2.0 s
内存限制:512.0 MB
题面描述
小杨有n种武器和m种强化材料。第i种强化材料会适配第pi种武器,小杨可以花费ci金币将该材料对应的适配武器修改为任意武器。小杨最喜欢第1种武器,因此他希望适配该武器的强化材料种类数严格大于其他的武器,请你帮小杨计算为了满足该条件最少需要花费多少金币。

【输入格式】
第一行包含两个正整数n, m。之后m行,每行包含两个正整数pi, ci,代表第i种强化材料的适配武器和修改花费。
【输出格式】
输出一个整数,代表最少花费的金币。
【样例】
样例输入
4 4
1 1
2 1
3 1
3 2
样例输出
1
数据范围
对于全部数据,保证有2 ≤ n ≤ 10⁵,n ≤ m ≤ 10⁵,1 ≤ pi ≤ n,1 ≤ ci ≤ 10⁹。
💬