当前位置: 面试刷题>> 提莫攻击 (经典算法题500道)


完整题目描述

提莫攻击

在《英雄联盟》这款游戏中,提莫(Teemo)以其独特的“毒性射击”技能闻名。这个技能使得提莫的普通攻击附带额外的魔法伤害,并且如果目标在一段时间内受到提莫的毒性射击再次攻击,会承受额外的持续伤害(中毒效果)。

现在,假设你是一名游戏开发者,需要设计一个算法来模拟提莫的“毒性射击”技能。算法需要接收一系列的攻击事件(包含攻击时间戳和伤害值),并计算每个攻击事件造成的总伤害(包括直接伤害和中毒的持续伤害)。

中毒效果的具体规则如下:

  1. 每次攻击都会造成直接伤害。
  2. 如果目标在受到当前攻击之前4秒内已经受到过提莫的攻击,则额外造成中毒的持续伤害,这个持续伤害是固定的值。
  3. 中毒效果不会叠加,即每次攻击只触发一次中毒效果(即使目标在4秒内被多次攻击)。

输入

  • 一个包含多个元素的列表,每个元素是一个包含两个整数的元组(或数组):(timestamp, damage),其中timestamp是攻击的时间戳(单位:秒),damage是此次攻击的直接伤害值。
  • 一个整数poisonDamage,表示中毒的持续伤害值。

输出

  • 一个列表,包含每个攻击事件造成的总伤害(包括直接伤害和中毒的持续伤害,如果适用)。

PHP 示例代码

<?php

function calculateTotalDamage($attacks, $poisonDamage) {
    $lastHitTime = -5; // 初始化上一次攻击的时间戳为-5秒,确保第一个攻击能触发中毒效果
    $result = [];

    foreach ($attacks as $attack) {
        list($timestamp, $damage) = $attack;
        $totalDamage = $damage; // 总伤害初始化为直接伤害

        if ($timestamp - $lastHitTime <= 4) {
            $totalDamage += $poisonDamage; // 如果在4秒内再次受到攻击,则增加中毒伤害
        }

        $result[] = $totalDamage;
        $lastHitTime = $timestamp; // 更新上一次攻击的时间戳
    }

    return $result;
}

// 示例
$attacks = [[1, 10], [5, 15], [9, 7], [13, 10]];
$poisonDamage = 5;
$totalDamages = calculateTotalDamage($attacks, $poisonDamage);
print_r($totalDamages);

?>

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 示例代码

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);

码小课网站中有更多相关内容分享给大家学习,涵盖算法设计、数据结构、编程语言等多个方面,帮助大家提升编程技能。