编程,作为现代技术领域的基础,是每个开发者成长道路上的必经之路。而对于编程新手来说,通过解决各种计算题,不仅能加深对编程语言的理解,还能锻炼逻辑思维和问题解决能力。下面,我将为大家带来30个经典计算题挑战,帮助你轻松提升编程技能。
1. 素数判定
题目描述:判断一个整数是否为素数。
代码示例(Python):
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(is_prime(17)) # 输出:True
2. 最大公约数
题目描述:计算两个整数的最大公约数。
代码示例(Python):
def gcd(a, b):
while b:
a, b = b, a % b
return a
# 测试
print(gcd(48, 18)) # 输出:6
3. 斐波那契数列
题目描述:打印斐波那契数列的前N项。
代码示例(Python):
def fibonacci(n):
a, b = 0, 1
for _ in range(n):
print(a, end=' ')
a, b = b, a + b
# 测试
fibonacci(10)
4. 阶乘计算
题目描述:计算一个整数的阶乘。
代码示例(Python):
def factorial(num):
if num == 0:
return 1
return num * factorial(num - 1)
# 测试
print(factorial(5)) # 输出:120
5. 汉诺塔问题
题目描述:使用递归解决汉诺塔问题。
代码示例(Python):
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')
6. 水仙花数
题目描述:找出所有的水仙花数。
代码示例(Python):
def narcissistic_number(num):
digits = [int(d) for d in str(num)]
return sum(d ** len(digits)) == num
# 测试
print([n for n in range(100) if narcissistic_number(n)])
7. 十二进制转换
题目描述:将十进制数转换为十二进制数。
代码示例(Python):
def decimal_to_hexadecimal(num):
hex_chars = "0123456789ABCDEF"
result = ""
while num > 0:
result = hex_chars[num % 16] + result
num //= 16
return result
# 测试
print(decimal_to_hexadecimal(255)) # 输出:FF
8. 字符串反转
题目描述:反转一个字符串。
代码示例(Python):
def reverse_string(s):
return s[::-1]
# 测试
print(reverse_string("hello")) # 输出:olleh
9. 回文数
题目描述:判断一个整数是否为回文数。
代码示例(Python):
def is_palindrome(num):
return str(num) == str(num)[::-1]
# 测试
print(is_palindrome(121)) # 输出:True
10. 字符串匹配
题目描述:检查一个字符串是否为另一个字符串的子串。
代码示例(Python):
def is_substring(s1, s2):
return s2 in s1
# 测试
print(is_substring("hello", "ell")) # 输出:True
11. 最大子序和
题目描述:找出一个数组中连续子数组的最大和。
代码示例(Python):
def max_subarray_sum(arr):
max_so_far = max_ending_here = arr[0]
for i in range(1, len(arr)):
max_ending_here = max(arr[i], max_ending_here + arr[i])
max_so_far = max(max_so_far, max_ending_here)
return max_so_far
# 测试
print(max_subarray_sum([-2, 1, -3, 4, -1, 2, 1, -5, 4])) # 输出:6
12. 单词逆序
题目描述:将一个字符串中的单词逆序。
代码示例(Python):
def reverse_words(s):
words = s.split()
return ' '.join(words[::-1])
# 测试
print(reverse_words("hello world")) # 输出:world hello
13. 求解一元二次方程
题目描述:求解一元二次方程 ax^2 + bx + c = 0。
代码示例(Python):
import math
def solve_quadratic(a, b, c):
discriminant = b**2 - 4*a*c
if discriminant < 0:
return "No real roots"
x1 = (-b + math.sqrt(discriminant)) / (2*a)
x2 = (-b - math.sqrt(discriminant)) / (2*a)
return x1, x2
# 测试
print(solve_quadratic(1, 0, -1)) # 输出:(1.0, 1.0)
14. 链表反转
题目描述:反转一个链表。
代码示例(Python):
class ListNode:
def __init__(self, val=0, next=None):
self.val = val
self.next = next
def reverse_linked_list(head):
prev, curr = None, 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
new_head = reverse_linked_list(node1)
while new_head:
print(new_head.val, end=' ')
new_head = new_head.next
15. 逆波兰表达式求值
题目描述:计算逆波兰表达式(后缀表达式)的值。
代码示例(Python):
def evaluate_postfix(expression):
stack = []
operators = set(["+", "-", "*", "/"])
for token in expression.split():
if token in operators:
operand2 = stack.pop()
operand1 = stack.pop()
if token == "+":
stack.append(operand1 + operand2)
elif token == "-":
stack.append(operand1 - operand2)
elif token == "*":
stack.append(operand1 * operand2)
elif token == "/":
stack.append(operand1 / operand2)
else:
stack.append(int(token))
return stack[0]
# 测试
print(evaluate_postfix("3 4 + 2 * 7 /")) # 输出:5.0
16. 素数筛法
题目描述:使用埃拉托斯特尼筛法找出小于等于N的所有素数。
代码示例(Python):
def sieve_of_eratosthenes(n):
primes = [True] * (n+1)
p = 2
while p**2 <= n:
if primes[p]:
for i in range(p**2, n+1, p):
primes[i] = False
p += 1
return [p for p in range(2, n+1) if primes[p]]
# 测试
print(sieve_of_eratosthenes(30))
17. 旋转数组
题目描述:将一个数组中的元素向右移动K个位置。
代码示例(Python):
def rotate_array(arr, k):
k %= len(arr)
return arr[-k:] + arr[:-k]
# 测试
print(rotate_array([1, 2, 3, 4, 5], 2)) # 输出:[4, 5, 1, 2, 3]
18. 字符串匹配(KMP算法)
题目描述:使用KMP算法查找一个字符串在另一个字符串中的所有出现位置。
代码示例(Python):
def kmp_search(text, pattern):
def compute_lps(pattern):
lps = [0] * len(pattern)
length = 0
i = 1
while i < len(pattern):
if pattern[i] == pattern[length]:
length += 1
lps[i] = length
i += 1
else:
if length != 0:
length = lps[length - 1]
else:
lps[i] = 0
i += 1
return lps
lps = compute_lps(pattern)
i = j = 0
indices = []
while i < len(text):
if pattern[j] == text[i]:
i += 1
j += 1
if j == len(pattern):
indices.append(i - j)
j = lps[j - 1]
elif i < len(text) and pattern[j] != text[i]:
if j != 0:
j = lps[j - 1]
else:
i += 1
return indices
# 测试
print(kmp_search("ABABDABACDABABCABAB", "ABABCABAB")) # 输出:[10, 11]
19. 二分查找
题目描述:在有序数组中查找一个元素的索引。
代码示例(Python):
def binary_search(arr, target):
low, high = 0, len(arr) - 1
while low <= high:
mid = (low + high) // 2
if arr[mid] == target:
return mid
elif arr[mid] < target:
low = mid + 1
else:
high = mid - 1
return -1
# 测试
print(binary_search([1, 2, 3, 4, 5, 6, 7, 8, 9], 5)) # 输出:4
20. 递归求阶乘
题目描述:使用递归计算一个整数的阶乘。
代码示例(Python):
def factorial_recursive(num):
if num == 0:
return 1
return num * factorial_recursive(num - 1)
# 测试
print(factorial_recursive(5)) # 输出:120
21. 字符串查找
题目描述:判断一个字符串是否包含另一个字符串作为子串。
代码示例(Python):
def string_contains(s1, s2):
return s2 in s1
# 测试
print(string_contains("hello world", "world")) # 输出:True
22. 合并区间
题目描述:合并一个区间列表。
代码示例(Python):
def merge_intervals(intervals):
if not intervals:
return []
intervals.sort(key=lambda x: x[0])
merged = [intervals[0]]
for current in intervals[1:]:
last = merged[-1]
if current[0] <= last[1]:
merged[-1] = (last[0], max(last[1], current[1]))
else:
merged.append(current)
return merged
# 测试
print(merge_intervals([[1, 3], [2, 6], [8, 10], [15, 18]]))
23. 翻转链表
题目描述:反转一个单链表。
代码示例(Python):
class ListNode:
def __init__(self, val=0, next=None):
self.val = val
self.next = next
def reverse_linked_list(head):
prev, curr = None, 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
new_head = reverse_linked_list(node1)
while new_head:
print(new_head.val, end=' ')
new_head = new_head.next
24. 最大子数组和
题目描述:找出一个数组中连续子数组的最大和。
代码示例(Python):
def max_subarray_sum(arr):
max_so_far = max_ending_here = arr[0]
for i in range(1, len(arr)):
max_ending_here = max(arr[i], max_ending_here + arr[i])
max_so_far = max(max_so_far, max_ending_here)
return max_so_far
# 测试
print(max_subarray_sum([-2, 1, -3, 4, -1, 2, 1, -5, 4])) # 输出:6
25. 快速排序
题目描述:使用快速排序算法对一个数组进行排序。
代码示例(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, 6, 8, 10, 1, 2, 1])) # 输出:[1, 1, 2, 3, 6, 8, 10]
26. 二分查找树
题目描述:实现一个二分查找树,并插入和查找元素。
代码示例(Python):
class TreeNode:
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right
class BinarySearchTree:
def __init__(self):
self.root = None
def insert(self, val):
if self.root is None:
self.root = TreeNode(val)
else:
self._insert_recursive(self.root, val)
def _insert_recursive(self, node, val):
if val < node.val:
if node.left is None:
node.left = TreeNode(val)
else:
self._insert_recursive(node.left, val)
else:
if node.right is None:
node.right = TreeNode(val)
else:
self._insert_recursive(node.right, val)
def search(self, val):
return self._search_recursive(self.root, val)
def _search_recursive(self, node, val):
if node is None:
return False
if val == node.val:
return True
elif val < node.val:
return self._search_recursive(node.left, val)
else:
return self._search_recursive(node.right, val)
# 测试
bst = BinarySearchTree()
bst.insert(5)
bst.insert(3)
bst.insert(7)
print(bst.search(3)) # 输出:True
27. 链表反转
题目描述:反转一个单链表。
代码示例(Python):
class ListNode:
def __init__(self, val=0, next=None):
self.val = val
self.next = next
def reverse_linked_list(head):
prev, curr = None, 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
new_head = reverse_linked_list(node1)
while new_head:
print(new_head.val, end=' ')
new_head = new_head.next
28. 素数生成器
题目描述:使用埃拉托斯特尼筛法生成一个指定范围内的所有素数。
代码示例(Python):
def sieve_of_eratosthenes(n):
primes = [True] * (n+1)
p = 2
while p**2 <= n:
if primes[p]:
for i in range(p**2, n+1, p):
primes[i] = False
p += 1
return [p for p in range(2, n+1) if primes[p]]
# 测试
print(sieve_of_eratosthenes(30))
29. 字符串替换
题目描述:将一个字符串中的所有指定字符替换为另一个字符。
代码示例(Python):
def string_replace(s, old, new):
return s.replace(old, new)
# 测试
print(string_replace("hello world", "o", "0")) # 输出:hell0 w0rld
30. 汉诺塔问题
题目描述:使用递归解决汉诺塔问题。
代码示例(Python):
”`python
