古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,用户输入一个月份数,计算并在一行内输出该月的兔子总对数以及前一个月与该月兔子数量的比值(计算并观察一下这个比值的数值是多少),比值结果保留小数点后3位,数字间用空格分隔。 输入格式 一个大于2的正整数 输出格式 在一行内输出两个数,数之间用空格隔开。第一个是整数,表示本月的兔子的对数,第二个是浮点数(严格保留小数点后三位),表示前一个月兔子数与本月兔子数的比值。 示例 输入:5 输出:5 0.600 平均代码量 7 行
时间: 2024-03-10 13:48:07 浏览: 73
c代码-有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?(输出前40个月即可)
上面的回答已经提供了使用递归和循环的代码实现,都是非常简洁的。以下是使用生成器的代码实现,也非常简洁:
```python
def rabbits():
a, b = 1, 1
yield a
yield b
while True:
a, b = b, a + b
yield b
month = int(input())
r = rabbits()
for i in range(month):
current_rabbits = next(r)
last_rabbits = next(r)
ratio = "{:.3f}".format(current_rabbits / last_rabbits) # 计算比值
print(current_rabbits, ratio)
```
这段代码定义了一个生成器`rabbits`,用来生成斐波那契数列中的每一项。在主程序中,首先读入月份数,然后使用`next`函数生成对应月份的兔子对数。最后计算比值并输出。注意使用`"{:.3f}".format()`来保留小数点后三位。
阅读全文