算法与程序设计试题带答案

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

算法与程序设计试题带答案
1. 以下是一道经典的算法题,请编写代码实现求最大公约数(GCD)的算法。

```python
def gcd(a, b):
if b == 0:
return a
return gcd(b, a % b)
# 测试
print(gcd(15, 25)) # 输出 5
print(gcd(54, 72)) # 输出 18
```
解析:这是一个使用递归实现的辗转相除法算法,也叫欧几里得算法。

当两个数 a 和 b 求最大公约数时,如果 b 等于 0,则 a 就是最大公
约数;否则,将 b 作为新的 a,将 a 除以 b 的余数作为新的 b 进行递归
计算。

2. 请编写代码实现一个链表的反转。

```python
class ListNode:
def __init__(self, val=0, next=None):
self.val = val
self.next = next
def reverse_linked_list(head):
prev = None
curr = head
while curr:
next_node = curr.next
curr.next = prev
prev = curr
curr = next_node
return prev
# 测试
node1 = ListNode(1)
node2 = ListNode(2)
node3 = ListNode(3)
node1.next = node2
node2.next = node3
reversed_head = reverse_linked_list(node1)
while reversed_head:
print(reversed_head.val)
reversed_head = reversed_head.next
```
解析:这是一个经典的链表反转算法。

使用 prev、curr、next_node 三个指针来实现,其中 prev 用于保存上一个节点,curr 用于保存当前节点,next_node 用于保存下一个节点。

在遍历链表的过程中,将 curr 的 next 指针指向 prev,然后依次往后移动 prev、curr、next_node 指针即可。

3. 请编写代码实现一个快速排序算法。

```python
def quick_sort(arr):
if len(arr) <= 1:
return arr
pivot = arr[len(arr) // 2]
left = [x for x in arr if x < pivot]
middle = [x for x in arr if x == pivot]
right = [x for x in arr if x > pivot]
return quick_sort(left) + middle + quick_sort(right)
# 测试
print(quick_sort([3, 1, 4, 2, 5])) # 输出 [1, 2, 3, 4, 5]
print(quick_sort([9, 6, 2, 4, 1, 0])) # 输出 [0, 1, 2, 4, 6, 9]
```
解析:快速排序是一种经典的排序算法,通过选择一个基准元素,将数组分成左右两部分,左边的元素都小于等于基准,右边的元素都大于基准,然后对左右两部分分别进行递归快速排序,最后将结果合并即可。

以上是三道算法与程序设计的试题,附带了代码实现和解析。

希望对你的学习和理解有所帮助!。

相关文档
最新文档