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