Description WW大佬一出门就遇到了一只普通史莱姆,他开始疯狂释放他的技能,已知他有Q、W、E、R、S五个技能,和总共释放技能的次数n。 Q:造成65*Q的释放次数(包括E复制的Q); W:如果上一个技能造成伤害大于等于250,就造成上次伤害50%的伤害,反之造成10%的伤害; E:重复上一个技能; R:造成上一个技能两倍的伤害,并使下一个技能伤害额外增加50%(最后结算) S:增加两次技能使用次数; 所有伤害数值向下取整。 Input 第一行输入一个整数n代表释放的技能数; 第二行有至少n个单字符表示所释放的技能,每两个字符间用空格隔开 输入保证第一个不为'E' Output 输出独占一行 输出最终造成的总伤害
时间: 2024-04-14 11:27:49 浏览: 229
根据你提供的问题描述,我理解到WW大佬释放技能的规则以及需要计算总伤害。下面是一个用C++编写的程序,可以计算出WW大佬最终造成的总伤害。
```cpp
#include <iostream>
#include <string>
#include <cmath>
using namespace std;
int main() {
int n;
cin >> n;
string last_skill = ""; // 上一个技能
int last_damage = 0; // 上一个技能的伤害
int extra_damage = 0; // 下一个技能的额外伤害
int total_damage = 0; // 总伤害
for (int i = 0; i < n; i++) {
string current_skill;
cin >> current_skill;
if (current_skill == "Q") {
int q_damage = 65 * (i + 1); // 伤害 = 65 * Q的释放次数
if (last_skill == "R") {
q_damage = floor(1.5 * q_damage); // R技能加成
}
total_damage += q_damage;
last_damage = q_damage;
}
else if (current_skill == "W") {
int w_damage;
if (last_damage >= 250) {
w_damage = floor(0.5 * last_damage); // 上一个技能伤害的50%
}
else {
w_damage = floor(0.1 * last_damage); // 上一个技能伤害的10%
}
if (last_skill == "R") {
w_damage = floor(1.5 * w_damage); // R技能加成
}
total_damage += w_damage;
last_damage = w_damage;
}
else if (current_skill == "E") {
if (last_skill == "") {
continue; // 如果没有上一个技能,则忽略E技能
}
last_damage = last_damage; // E技能重复上一个技能的伤害
}
else if (current_skill == "R") {
if (last_skill == "") {
continue; // 如果没有上一个技能,则忽略R技能
}
int r_damage = last_damage * 2; // 伤害 = 上一个技能伤害的两倍
if (last_skill == "R") {
r_damage = floor(1.5 * r_damage); // R技能加成
}
total_damage += r_damage;
last_damage = r_damage;
}
else if (current_skill == "S") {
n += 2; // 增加两次技能使用次数
}
last_skill = current_skill; // 更新上一个技能
}
cout << total_damage;
return 0;
}
```
使用这段代码,你可以输入技能释放的顺序和次数,然后程序将计算出WW大佬最终造成的总伤害并输出。
希望这个解决方案对你有帮助!如果还有其他问题,请随时提问。
阅读全文