用代码实现鸡兔同笼约瑟夫环埃氏筛法计数排序
时间: 2025-05-09 15:16:20 浏览: 28
好的!下面我会分别介绍 **鸡兔同笼**、**约瑟夫环**、**埃氏筛法** 和 **计数排序** 的基本原理,并给出相应的 Python 实现代码。
---
### 鸡兔同笼
#### 原理
假设有一个笼子里有若干只鸡和兔子,已知它们总共有 `n` 只头和 `m` 条腿。根据鸡有两个脚而兔子有四个脚的特性,我们可以列出方程组并求解:
设鸡的数量为 x,兔子的数量为 y,则:
```
x + y = n (总数)
2x + 4y = m (总共的腿数)
```
通过代入消元可以得出结果。
#### 示例代码
```python
def solve_chicken_rabbit(total_heads, total_legs):
for chickens in range(0, total_heads + 1):
rabbits = total_heads - chickens
if 2 * chickens + 4 * rabbits == total_legs:
return f"鸡: {chickens}, 兔子: {rabbits}"
return "无解"
# 测试用例
print(solve_chicken_rabbit(35, 94)) # 输出:鸡: 23, 兔子: 12
```
---
### 约瑟夫环
#### 原理
这是一个经典的数学问题,在一个循环列表中依次淘汰第 k 个人直到剩下最后一个人为止。我们通常会用递归或迭代解决这个问题。
#### 示例代码
```python
def josephus(n, k):
circle = list(range(1, n+1))
idx = 0
while len(circle) > 1:
idx = (idx + k - 1) % len(circle)
print(f"移除编号 {circle.pop(idx)}")
return circle[0]
# 测试用例
last_person = josephus(7, 3) # 总人数7人,每次报到3的人被淘汰
print("最终幸存者:", last_person)
```
---
### 埃氏筛法
#### 原理
用于生成小于等于某个整数的所有质数的一种高效算法。核心思想是从最小素数开始逐层筛选掉非素数。
#### 示例代码
```python
def sieve_of_eratosthenes(limit):
primes = [True] * (limit + 1)
p = 2
while p * p <= limit:
if primes[p]:
for i in range(p * p, limit + 1, p):
primes[i] = False
p += 1
prime_numbers = [i for i in range(2, limit + 1) if primes[i]]
return prime_numbers
# 测试用例
result = sieve_of_eratosthenes(50) # 找出所有小于等于50的质数
print(result) # 输出:[2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47]
```
---
### 计数排序
#### 原理
适用于一定范围内的整数数组快速排序方法之一。它统计每个值出现次数然后按顺序放置回原位置上。
#### 示例代码
```python
def counting_sort(arr):
max_val = max(arr)
count_array = [0] * (max_val + 1)
for num in arr:
count_array[num] += 1
sorted_arr = []
for value, count in enumerate(count_array):
sorted_arr.extend([value]*count)
return sorted_arr
# 测试用例
arr = [4, 2, 2, 8, 3, 3, 1]
sorted_result = counting_sort(arr)
print(sorted_result) # 输出:[1, 2, 2, 3, 3, 4, 8]
```
---
以上是四种经典算法及其Python实现示例!
阅读全文
相关推荐












