用Python:大约在1500年前,《孙子算经》中记载一个有趣的问题:今有雉兔同笼,上有三十五头,下有九十四足,问雉兔各几何? 大概的意思是:有若干只鸡兔同在一个笼子里,从上面数,有35个头,从下面数,有94只脚,问笼中各有多少只鸡和兔? 请编一个程序,用户在同一行内输入两个整数,代表头和脚的数量,编程计算笼中各有多少只鸡和兔(假设鸡和兔都正常,无残疾)。如无解则输出Data Error! 参考下面的示例代码,从同一行读入两个数 a, b = input().split() # 将输入的以空格分隔的两个数命名为a和b a, b = map(int,input().split(',')) # 将输入的以逗号分隔的两个值,转换为整数后命名为a和b 输入格式 输入为一行,以空格分隔的两个整数heads, legs,分别代表鸡兔的总头数和总脚数。 输出格式 若有解输出: 有m只鸡,n只兔 若无解输出: Data Error! 示例 1 输入: 35 94 输出: 有23只鸡,12只兔 示例 2 输入: -24 12 输出: Data Error! 示例 3 输入: 12 35 输出: Data Error!
时间: 2025-06-26 13:25:17 浏览: 12
这是一个经典的“鸡兔同笼”问题,可以用代数方程解决,并通过 Python 编写程序实现自动化求解。以下是完整解决方案及其解释:
---
### **Python 实现代码**
```python
# 获取用户输入的头和腿的数量
heads, legs = map(int, input().split())
# 解题公式推导:
# 设鸡的数量为 x,兔子的数量为 y,
# 根据题目条件可以列出以下方程组:
# 方程1: 鸡 + 兔子 = 总头数 -> x + y = heads
# 方程2: 鸡脚 + 兔脚 = 总脚数 -> 2x + 4y = legs
if heads <= 0 or legs <= 0 or legs % 2 != 0 or legs < 2 * heads or legs > 4 * heads:
# 如果输入数据不合理(例如负数、不符合逻辑的比例),直接输出 Data Error!
print("Data Error!")
else:
# 计算兔子数量 y 和鸡数量 x 的表达式:
rabbits = (legs - 2 * heads) // 2 # 兔子数量
chickens = heads - rabbits # 鸡的数量
# 检查结果是否合理
if rabbits >= 0 and chickens >= 0:
print(f"有{chickens}只鸡,{rabbits}只兔")
else:
print("Data Error!") # 如果计算出的结果不满足非负约束,也认为无解
```
---
### **详细解析**
1. **数学建模**
- 假设有 `x` 只鸡和 `y` 只兔子。
- 根据题目给定的两个等式:
- \(x + y = \text{{heads}}\) (每个动物有一个头)
- \(2x + 4y = \text{{legs}}\) (每只鸡有 2 条腿,兔子有 4 条腿)
- 化简得到兔子的数量公式:\(y = (\text{{legs}} - 2\cdot\text{{heads}})/2\)。
2. **合理性检查**
- 输入的数据需满足基本物理规律:头数和腿数应为正整数,且腿数必须是偶数;
- 腿数范围限制:对于任意合理的 `(head, leg)` 组合,必须保证 \(2\times head \leqslant leg \leqslant 4\times head\)。
3. **边界条件**
- 如果计算得出的鸡或兔数量小于零,则视为无效输入 (`Data Error`)。
---
### 示例运行
#### 测试案例 1
**输入**:
```
35 94
```
**过程分析**:
- \(rabbit = (94 - 2*35)//2 = 12\)
- \(chicken = 35 - 12 = 23\)
**输出**:
```
有23只鸡,12只兔
```
#### 测试案例 2
**输入**:
```
-24 12
```
**过程分析**:
- 数据非法 (-24 不可能是有效头数),因此直接返回 `Data Error!`.
**输出**:
```
Data Error!
```
#### 测试案例
阅读全文
相关推荐











