跳转至

难题练习 — 程序填空题

练习说明

  • 共 8 道程序填空题,难度高于模拟考试
  • 每题包含 2~3 个填空,标记为 #**********begin**********#**********end**********
  • 建议每题用时 5~8 分钟

📝 程序填空题

第1题:冒泡排序优化

题目: 对列表进行冒泡排序,并添加提前退出优化(如果某轮没有发生交换,说明已有序)。

Python
def bubble_sort(lst):
    n = len(lst)
    for i in range(n - 1):
        #**********begin1**********
        _______
        #**********end1**********
        for j in range(n - 1 - i):
            if lst[j] > lst[j + 1]:
                lst[j], lst[j + 1] = lst[j + 1], lst[j]
                #**********begin2**********
                _______
                #**********end2**********
        #**********begin3**********
        _______
        #**********end3**********
    return lst

nums = [64, 34, 25, 12, 22, 11, 90]
print(bubble_sort(nums))
第2题:二分查找

题目: 在已排序列表中使用二分查找算法查找目标元素,返回其索引,找不到返回-1。

Python
def binary_search(lst, target):
    left = 0
    #**********begin1**********
    _______
    #**********end1**********
    while left <= right:
        mid = (left + right) // 2
        if lst[mid] == target:
            return mid
        elif lst[mid] < target:
            #**********begin2**********
            _______
            #**********end2**********
        else:
            #**********begin3**********
            _______
            #**********end3**********
    return -1

nums = [1, 3, 5, 7, 9, 11, 13, 15, 17, 19]
print(binary_search(nums, 7))
print(binary_search(nums, 8))
第3题:选择排序

题目: 实现选择排序算法,每轮从未排序部分选出最小元素放到已排序部分末尾。

Python
def selection_sort(lst):
    n = len(lst)
    for i in range(n - 1):
        #**********begin1**********
        _______
        #**********end1**********
        for j in range(i + 1, n):
            #**********begin2**********
            _______
            #**********end2**********
        #**********begin3**********
        _______
        #**********end3**********
    return lst

nums = [29, 10, 14, 37, 13]
print(selection_sort(nums))
第4题:字符串去重保持顺序

题目: 去除字符串中重复的字符,保持字符首次出现的顺序。

Python
def remove_duplicate_chars(s):
    result = ""
    #**********begin1**********
    _______
    #**********end1**********
        if ch not in result:
            #**********begin2**********
            _______
            #**********end2**********
    return result

s = "programming"
print(remove_duplicate_chars(s))  # 输出: progamin
第5题:矩阵乘法

题目: 计算两个矩阵的乘积。A是m×n矩阵,B是n×p矩阵,结果C是m×p矩阵。

Python
def matrix_multiply(A, B):
    m = len(A)
    n = len(A[0])
    p = len(B[0])
    #**********begin1**********
    _______
    #**********end1**********
    for i in range(m):
        for j in range(p):
            #**********begin2**********
            _______
            #**********end2**********
            for k in range(n):
                C[i][j] += A[i][k] * B[k][j]
    return C

A = [[1, 2], [3, 4]]
B = [[5, 6], [7, 8]]
print(matrix_multiply(A, B))  # 输出: [[19, 22], [43, 50]]
第6题:统计单词频率

题目: 统计一段英文中每个单词出现的次数,按频率从高到低排序输出。

Python
def word_frequency(text):
    #**********begin1**********
    _______
    #**********end1**********
    for word in words:
        word = word.lower()
        if word in freq:
            freq[word] += 1
        else:
            freq[word] = 1
    #**********begin2**********
    _______
    #**********end2**********
    return sorted_freq

text = "the cat sat on the mat the cat ate the rat"
result = word_frequency(text)
for word, count in result:
    print(f"{word}: {count}")
第7题:递归求幂

题目: 使用递归实现快速幂运算,计算x的n次方。

Python
def fast_pow(x, n):
    if n == 0:
        return 1
    #**********begin1**********
    _______
    #**********end1**********
    if n % 2 == 0:
        #**********begin2**********
        _______
        #**********end2**********
    else:
        #**********begin3**********
        _______
        #**********end3**********

print(fast_pow(2, 10))   # 输出: 1024
print(fast_pow(3, 5))    # 输出: 243
第8题:文件单词统计

题目: 读取文件内容,统计每个单词出现的次数,将结果写入新文件。

Python
def count_words(input_file, output_file):
    word_count = {}
    #**********begin1**********
    _______
    #**********end1**********
        for line in f:
            words = line.strip().split()
            for word in words:
                #**********begin2**********
                _______
                #**********end2**********

    #**********begin3**********
    _______
    #**********end3**********
        for word, count in sorted(word_count.items()):
            f_out.write(f"{word}: {count}\n")