甲乙丙丁四人同时放鞭炮,甲每隔t1秒放一次,乙每隔t2秒放一次,丙每隔t3秒放一次,丁每隔t4秒放一次,没人放n次。编写fun函数。当几个鞭炮同时响,只算一次响声,第一次响声在0秒。
时间: 2023-09-26 20:07:27 浏览: 135
下面是一个 Python 的实现,其中使用了集合来去除重复的响声次数:
```python
def fun(t1, t2, t3, t4, n):
# 初始化计数器和时间戳
count = 0
time = 0
# 初始化鞭炮的时间间隔列表
intervals = [t1, t2, t3, t4]
# 初始化每个人放鞭炮的时间戳
next_times = [0, 0, 0, 0]
# 初始化已经响过的时间戳集合
heard = set()
# 循环直到所有人都放完n次鞭炮
while min(next_times) < n:
# 找到下一个放鞭炮的人
min_time = min(next_times)
person = next_times.index(min_time)
# 计算这个人下一次放鞭炮的时间戳
next_times[person] += intervals[person]
# 如果当前时间戳已经在已经响过的时间戳集合中出现过,说明这个鞭炮声已经被计算过了,跳过
if next_times[person] in heard:
continue
# 将当前时间戳加入已经响过的时间戳集合中
heard.add(next_times[person])
# 如果当前时间戳大于等于上一个响声的时间戳加上最小的时间间隔,说明有新的响声产生
if next_times[person] >= time + min(intervals):
count += 1
time = next_times[person]
return count
```
示例用法:
```python
print(fun(2, 3, 5, 7, 10)) # 输出 5
```
解释:甲每2秒放一次,乙每3秒放一次,丙每5秒放一次,丁每7秒放一次,他们每人放10次,总共会有5次鞭炮声,分别在0秒、2秒、5秒、7秒和10秒响起。
阅读全文