1. 等差数列求和
题目描述: 求等差数列 2, 5, 8, 11, …, 100 的和。
解答思路:
- 等差数列求和公式为:S = n/2 * (a1 + an),其中n为项数,a1为首项,an为末项。
- 首先计算项数n,由于最后一项为100,首项为2,公差为3,可以用公式 an = a1 + (n - 1)d 来计算。
# 代码示例
a1 = 2
an = 100
d = 3
n = (an - a1) // d + 1
S = n * (a1 + an) // 2
print(f"等差数列的和为:{S}")
2. 最大公约数
题目描述: 求 24 和 36 的最大公约数。
解答思路:
- 使用辗转相除法(欧几里得算法)来计算最大公约数。
# 代码示例
def gcd(a, b):
while b != 0:
a, b = b, a % b
return a
print(f"24 和 36 的最大公约数为:{gcd(24, 36)}")
3. 日期计算
题目描述: 2000年1月1日到2010年1月1日共有多少天?
解答思路:
- 计算闰年和非闰年的天数,然后相加。
# 代码示例
def is_leap_year(year):
return year % 4 == 0 and (year % 100 != 0 or year % 400 == 0)
days_in_year = 366 if is_leap_year(2000) else 365
total_days = days_in_year * 10
print(f"2000年1月1日到2010年1月1日共有:{total_days}天")
4. 简化分数
题目描述: 简化分数 14/21。
解答思路:
- 使用辗转相除法来找到分子和分母的最大公约数,然后分别除以最大公约数。
# 代码示例
def simplify_fraction(numerator, denominator):
gcd_value = gcd(numerator, denominator)
return numerator // gcd_value, denominator // gcd_value
print(f"14/21 简化为:{simplify_fraction(14, 21)[0]}/{simplify_fraction(14, 21)[1]}")
5. 矩阵乘法
题目描述: 计算矩阵 A 和矩阵 B 的乘积。
解答思路:
- 矩阵乘法规则是,矩阵 A 的第 i 行第 j 列的元素等于 A 的第 i 行与 B 的第 j 列对应元素的乘积之和。
# 代码示例
A = [[1, 2], [3, 4]]
B = [[2, 0], [1, 3]]
result = [[sum(a * b for a, b in zip(A_row, B_col)) for B_col in zip(*B)] for A_row in A]
print(f"矩阵 A 和矩阵 B 的乘积为:{result}")
6. 斐波那契数列
题目描述: 计算斐波那契数列的第 10 项。
解答思路:
- 斐波那契数列定义为:F(0) = 0, F(1) = 1, F(n) = F(n-1) + F(n-2)。
# 代码示例
def fibonacci(n):
a, b = 0, 1
for _ in range(n):
a, b = b, a + b
return a
print(f"斐波那契数列的第 10 项为:{fibonacci(10)}")
7. 汉诺塔问题
题目描述: 求解汉诺塔问题,将 n 个盘子从塔 A 移动到塔 C。
解答思路:
- 汉诺塔问题的递归解法:将 n-1 个盘子从塔 A 移动到辅助塔 B,然后将第 n 个盘子从塔 A 移动到塔 C,最后将 n-1 个盘子从塔 B 移动到塔 C。
# 代码示例
def hanoi(n, source, target, auxiliary):
if n == 1:
print(f"Move disk 1 from {source} to {target}")
return
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')
8. 排列组合
题目描述: 计算 5 个不同元素的排列数。
解答思路:
- 排列数公式为:P(n, r) = n! / (n - r)!
# 代码示例
from math import factorial
def permutations(n, r):
return factorial(n) // factorial(n - r)
print(f"5 个不同元素的排列数为:{permutations(5, 5)}")
9. 二分查找
题目描述: 在有序数组中查找元素 7。
解答思路:
- 二分查找算法通过将查找区间分成两半来逐步缩小查找范围。
# 代码示例
def binary_search(arr, x):
low, high = 0, len(arr) - 1
while low <= high:
mid = (low + high) // 2
if arr[mid] < x:
low = mid + 1
elif arr[mid] > x:
high = mid - 1
else:
return mid
return -1
arr = [1, 3, 5, 7, 9, 11]
print(f"元素 7 在数组中的索引为:{binary_search(arr, 7)}")
10. 求解一元二次方程
题目描述: 求解方程 x^2 - 5x + 6 = 0。
解答思路:
- 使用求根公式 x = (-b ± sqrt(b^2 - 4ac)) / (2a)。
# 代码示例
import math
a = 1
b = -5
c = 6
delta = b**2 - 4*a*c
if delta > 0:
x1 = (-b + math.sqrt(delta)) / (2*a)
x2 = (-b - math.sqrt(delta)) / (2*a)
print(f"方程的解为:x1 = {x1}, x2 = {x2}")
else:
print("方程无实数解")
11. 概率计算
题目描述: 抛掷两个公平的六面骰子,求两个骰子点数之和为 7 的概率。
解答思路:
- 计算所有可能的点数之和,然后找出和为 7 的组合数。
# 代码示例
def dice_probability():
total_combinations = 6 * 6
winning_combinations = sum(1 for i in range(1, 7) for j in range(1, 7) if i + j == 7)
return winning_combinations / total_combinations
print(f"两个骰子点数之和为 7 的概率为:{dice_probability()}")
12. 鸡兔同笼问题
题目描述: 一个笼子里有鸡和兔共 35 只,脚共有 94 只,求鸡和兔各有多少只?
解答思路:
- 设鸡有 x 只,兔有 y 只,根据题目条件建立方程组求解。
# 代码示例
def chicken_and_rabbit(total_animals, total_legs):
for chickens in range(total_animals + 1):
rabbits = total_animals - chickens
if 2 * chickens + 4 * rabbits == total_legs:
return chickens, rabbits
return None
chickens, rabbits = chicken_and_rabbit(35, 94)
print(f"鸡有 {chickens} 只,兔有 {rabbits} 只")
13. 最大公约数与最小公倍数
题目描述: 求 18 和 24 的最大公约数和最小公倍数。
解答思路:
- 最大公约数已经在前面的题目中计算过,最小公倍数为两数乘积除以最大公约数。
# 代码示例
gcd_value = gcd(18, 24)
lcm = 18 * 24 // gcd_value
print(f"18 和 24 的最大公约数为:{gcd_value}")
print(f"18 和 24 的最小公倍数为:{lcm}")
14. 水杯倒水问题
题目描述: 有两个容量分别为 4 升和 3 升的水杯,如何只用这两个水杯量出 2 升的水?
解答思路:
- 通过倒水操作,逐步将水杯中的水倒满或倒空,最终得到 2 升的水。
# 代码示例
def measure_two_liters(cup1, cup2):
while True:
if cup1 == 0:
cup2 = cup2 - cup1
elif cup2 == 0:
cup1 = cup1 - cup2
elif cup1 + cup2 == 2:
break
elif cup1 + cup2 > 2:
cup2 = cup2 - (2 - cup1)
elif cup1 + cup2 < 2:
cup1 = cup1 - (2 - cup2)
return cup1
cup1 = 0
cup2 = 3
print(f"量出 2 升水的操作为:{measure_two_liters(cup1, cup2)}")
15. 数字三角形求和
题目描述: 计算数字三角形中从顶到底的对角线之和。
1
2 3
4 5 6
7 8 9 10
11 12 13 14 15
解答思路:
- 递归求解,每个数等于它上方两个数之和。
# 代码示例
def triangle_sum(triangle, row, col):
if row == len(triangle):
return 0
if col == 0 or col == row:
return triangle[row][col] + triangle_sum(triangle, row + 1, col)
return triangle[row][col] + triangle_sum(triangle, row + 1, col - 1) + triangle_sum(triangle, row + 1, col + 1)
triangle = [
[1],
[2, 3],
[4, 5, 6],
[7, 8, 9, 10],
[11, 12, 13, 14, 15]
]
print(f"数字三角形从顶到底的对角线之和为:{triangle_sum(triangle, 0, 0)}")
16. 素数检测
题目描述: 编写一个函数来检测一个数是否为素数。
解答思路:
- 从 2 到该数的平方根逐个检查是否有因数。
# 代码示例
def is_prime(num):
if num <= 1:
return False
for i in range(2, int(num**0.5) + 1):
if num % i == 0:
return False
return True
print(f"数 29 是否为素数:{is_prime(29)}")
17. 等比数列求和
题目描述: 求等比数列 3, 6, 12, 24, …, 192 的和。
解答思路:
- 等比数列求和公式为:S = a1 * (1 - r^n) / (1 - r),其中a1为首项,r为公比,n为项数。
# 代码示例
a1 = 3
r = 2
n = 7 # 192 是第 7 项
S = a1 * (1 - r**n) / (1 - r)
print(f"等比数列的和为:{S}")
18. 数字序列求和
题目描述: 计算以下数字序列的和:1, 1, 2, 3, 5, 8, 13, …
解答思路:
- 这个序列是斐波那契数列,可以使用递归或循环来计算。
# 代码示例
def fibonacci_sum(n):
if n <= 1:
return n
return fibonacci_sum(n - 1) + fibonacci_sum(n - 2)
print(f"斐波那契数列前 10 项的和为:{fibonacci_sum(10)}")
19. 骰子概率问题
题目描述: 抛掷三个公平的六面骰子,求三个骰子点数之和为 9 的概率。
解答思路:
- 计算所有可能的点数之和,然后找出和为 9 的组合数。
# 代码示例
def dice_probability_three_dice():
total_combinations = 6 * 6 * 6
winning_combinations = sum(1 for i in range(1, 7) for j in range(1, 7) for k in range(1, 7) if i + j + k == 9)
return winning_combinations / total_combinations
print(f"三个骰子点数之和为 9 的概率为:{dice_probability_three_dice()}")
20. 日期差计算
题目描述: 计算 2022年1月1日到 2023年1月1日之间有多少天?
解答思路:
- 使用日期模块来计算两个日期之间的天数差。
# 代码示例
from datetime import datetime
start_date = datetime(2022, 1, 1)
end_date = datetime(2023, 1, 1)
delta = (end_date - start_date).days
print(f"2022年1月1日到2023年1月1日之间共有:{delta}天")
21. 逆序数计算
题目描述: 计算一个正整数的逆序数。
解答思路:
- 将整数的每一位数字逆序排列,然后转换为整数。
# 代码示例
def reverse_number(num):
return int(str(num)[::-1])
print(f"逆序数 1234 的结果为:{reverse_number(1234)}")
22. 最大子数组和
题目描述: 给定一个整数数组,找出一个具有最大子数组和的连续子数组(子数组最少包含一个元素)。
解答思路:
- 动态规划,使用一个变量来记录当前的最大子数组和,以及一个变量来记录全局的最大子数组和。
# 代码示例
def max_subarray_sum(arr):
max_current = max_global = arr[0]
for num in arr[1:]:
max_current = max(num, max_current + num)
max_global = max(max_global, max_current)
return max_global
arr = [-2, 1, -3, 4, -1, 2, 1, -5, 4]
print(f"最大子数组和为:{max_subarray_sum(arr)}")
23. 字符串反转
题目描述: 编写一个函数来反转一个字符串。
解答思路:
- 使用字符串切片来反转字符串。
# 代码示例
def reverse_string(s):
return s[::-1]
print(f"字符串 'hello' 反转为:{reverse_string('hello')}")
24. 十六进制转换
题目描述: 将十进制数 255 转换为十六进制数。
解答思路:
- 使用除以 16 取余的方法来转换。
# 代码示例
def decimal_to_hexadecimal(num):
hex_chars = "0123456789ABCDEF"
if num == 0:
return "0"
hex_result = ""
while num > 0:
hex_result = hex_chars[num % 16] + hex_result
num //= 16
return hex_result
print(f"十进制数 255 的十六进制表示为:{decimal_to_hexadecimal(255)}")
25. 汉明距离
题目描述: 计算 two_sum 的两个数字之和的表示形式中 1 的数量。
解答思路:
- 使用位运算来计算两个数的异或运算结果中 1 的数量。
# 代码示例
def hamming_distance(x, y):
xor_result = x ^ y
count = 0
while xor_result:
count += xor_result & 1
xor_result >>= 1
return count
print(f"数字 29 和 13 的汉明距离为:{hamming_distance(29, 13)}")
26. 素数生成器
题目描述: 编写一个素数生成器,生成小于等于给定数的所有素数。
解答思路:
- 使用埃拉托斯特尼筛法来生成素数。
”`python
代码示例
def sieve_of_eratosthenes(limit):
is_prime = [True] * (limit + 1)
primes = []
for num in range(2, limit + 1):
if is_prime[num]:
primes.append(num)
for multiple in range(num*num, limit + 1, num):
is_prime[multiple] = False
return primes
print(f”小于等于 100 的所有素数为:{s
