答:
def monkey_count(n):
count = 1 # 初始时只有一个孙悟空本体
cooldown = 2 # 第一次分身的 CD 为 2 秒
monkeys = [0] * n # 创建一个长度为 n 的数组,用于记录每秒的猴子数量
for i in range(n):
if cooldown == 0:
count += 1
cooldown = count
else:
cooldown -= 1
for j in range(count):
monkeys[i] += 1
if i >= 11:
count -= monkeys[i-11]
return sum(monkeys)
t = int(input("请输入时间:"))
print("第", t, "秒时共有", monkey_count(t), "只猴。")
解释:
count 表示当前孙悟空的总数,初始时只有一个本体;
cooldown 表示当前孙悟空本体的分身术 CD,初始为 2 秒;
monkeys 是一个长度为 n 的数组,记录每秒的猴子数量;
循环 n 次,模拟每一秒的情况;
如果当前本体的分身术 CD 为 0,表示可以再次分身,此时总数 count 加 1,分身术 CD 重置为 count;
否则分身术 CD 减 1;
对于当前的每一个孙悟空,都将对应的秒数 i 的猴子数量加 1;
如果当前秒数 i 大于等于 11,需要减去 11 秒前的孙悟空数量,因为这些孙悟空已经消失了;
最后返回 monkeys 数组的总和,即为在第 n 秒时共有多少只猴。