当前位置: 面试刷题>> 提莫攻击 (经典算法题500道)
### 完整题目描述
**提莫攻击**
在《英雄联盟》这款游戏中,提莫(Teemo)以其独特的“毒性射击”技能闻名。这个技能使得提莫的普通攻击附带额外的魔法伤害,并且如果目标在一段时间内受到提莫的毒性射击再次攻击,会承受额外的持续伤害(中毒效果)。
现在,假设你是一名游戏开发者,需要设计一个算法来模拟提莫的“毒性射击”技能。算法需要接收一系列的攻击事件(包含攻击时间戳和伤害值),并计算每个攻击事件造成的总伤害(包括直接伤害和中毒的持续伤害)。
中毒效果的具体规则如下:
1. 每次攻击都会造成直接伤害。
2. 如果目标在受到当前攻击之前4秒内已经受到过提莫的攻击,则额外造成中毒的持续伤害,这个持续伤害是固定的值。
3. 中毒效果不会叠加,即每次攻击只触发一次中毒效果(即使目标在4秒内被多次攻击)。
**输入**:
- 一个包含多个元素的列表,每个元素是一个包含两个整数的元组(或数组):`(timestamp, damage)`,其中`timestamp`是攻击的时间戳(单位:秒),`damage`是此次攻击的直接伤害值。
- 一个整数`poisonDamage`,表示中毒的持续伤害值。
**输出**:
- 一个列表,包含每个攻击事件造成的总伤害(包括直接伤害和中毒的持续伤害,如果适用)。
### PHP 示例代码
```php
```
### Python 示例代码
```python
def calculate_total_damage(attacks, poison_damage):
last_hit_time = -5 # 初始化上一次攻击的时间戳
total_damages = []
for timestamp, damage in attacks:
total_damage = damage
if timestamp - last_hit_time <= 4:
total_damage += poison_damage
total_damages.append(total_damage)
last_hit_time = timestamp
return total_damages
# 示例
attacks = [(1, 10), (5, 15), (9, 7), (13, 10)]
poison_damage = 5
total_damages = calculate_total_damage(attacks, poison_damage)
print(total_damages)
```
### JavaScript 示例代码
```javascript
function calculateTotalDamage(attacks, poisonDamage) {
let lastHitTime = -5; // 初始化上一次攻击的时间戳
const totalDamages = [];
attacks.forEach(([timestamp, damage]) => {
let totalDamage = damage;
if (timestamp - lastHitTime <= 4) {
totalDamage += poisonDamage; // 如果在4秒内再次受到攻击,增加中毒伤害
}
totalDamages.push(totalDamage);
lastHitTime = timestamp; // 更新上一次攻击的时间戳
});
return totalDamages;
}
// 示例
const attacks = [[1, 10], [5, 15], [9, 7], [13, 10]];
const poisonDamage = 5;
const totalDamages = calculateTotalDamage(attacks, poisonDamage);
console.log(totalDamages);
```
**码小课网站中有更多相关内容分享给大家学习**,涵盖算法设计、数据结构、编程语言等多个方面,帮助大家提升编程技能。