题目一:数列求和
题目描述
给定一个数列 (a_n = n^2 + 2n + 1),求前 (n) 项的和 (S_n)。
解题思路
我们可以通过直接求和的方式,使用循环或公式求解。
解答
def sum_series(n):
return sum(n**2 + 2*n + 1 for n in range(1, n+1))
# 测试
n = 5
print(f"数列 {n} 项的和为: {sum_series(n)}")
题目二:最大公约数
题目描述
编写一个函数,用于计算两个正整数 (a) 和 (b) 的最大公约数。
解题思路
我们可以使用辗转相除法(欧几里得算法)来计算最大公约数。
解答
def gcd(a, b):
while b:
a, b = b, a % b
return a
# 测试
a, b = 48, 18
print(f"最大公约数: {gcd(a, b)}")
题目三:汉诺塔问题
题目描述
编写一个函数,使用递归的方式解决汉诺塔问题,并输出移动过程。
解题思路
汉诺塔问题可以通过递归分解为更小的问题来解决。
解答
def hanoi(n, source, target, auxiliary):
if n > 0:
hanoi(n - 1, source, auxiliary, target)
print(f"Move disk {n} from {source} to {target}")
hanoi(n - 1, auxiliary, target, source)
# 测试
hanoi(3, 'A', 'C', 'B')
题目四:二分查找
题目描述
给定一个有序数组和一个目标值,使用二分查找算法找出目标值在数组中的索引。
解题思路
二分查找算法的核心思想是每次将数组分成两半,根据目标值与中间元素的比较结果来决定是查找左半部分还是右半部分。
解答
def binary_search(arr, target):
left, right = 0, len(arr) - 1
while left <= right:
mid = (left + right) // 2
if arr[mid] == target:
return mid
elif arr[mid] < target:
left = mid + 1
else:
right = mid - 1
return -1
# 测试
arr = [1, 2, 3, 4, 5, 6, 7, 8, 9]
target = 4
print(f"目标值 {target} 在数组中的索引为: {binary_search(arr, target)}")
题目五:斐波那契数列
题目描述
编写一个函数,使用迭代的方式生成斐波那契数列的前 (n) 项。
解题思路
斐波那契数列可以通过迭代的方式来计算,避免递归导致的重复计算。
解答
def fibonacci(n):
a, b = 0, 1
result = []
for _ in range(n):
result.append(a)
a, b = b, a + b
return result
# 测试
n = 10
print(f"斐波那契数列的前 {n} 项为: {fibonacci(n)}")
