题解:P12170 [蓝桥杯 2025 省 Python B] 攻击次数

· · 题解

本站蓝桥杯 2025 省赛测试数据均为洛谷自造,与官方数据可能存在差异,仅供学习参考。 【2025-04-13 13:05】本题题目有歧义,根据多数用户理解我们修改了数据,目前洛谷数据判定为:3 个英雄只要能攻击就一起攻击。如果 3 个英雄只能选择能攻击的中攻击最高的,答案为 181

解法

根据题意模拟,用多个 if 来判断回合数是否为奇数、3 的倍数等等。

CODE

若你的想法是只要能攻击就一起攻击,模拟代码应该是:

#include<iostream>
using namespace std;
int main(){
    int hp=2025,hh=1;
    for(;hp>0;hh++){
        int sum=5;
        if(hh%2==1)sum+=15;//判断,下同
        else sum+=2;
        if(hh%3==1)sum+=2;
        else if(hh%3==2)sum+=10;
        else sum+=7;
        hp-=sum;//减去
    }
    cout<<--hh;//注意要减1
    return 0;
}

若你的想法是只能选择能攻击的中攻击最高的,模拟代码:

#include<iostream>
using namespace std;
int main(){
    int hp=2025,hh=1;
    for(;hp>0;hh++){
        int sum=5;
        if(hh%2==1)sum=max(sum,15);//选取最大值,下同
        else sum=max(sum,2);
        if(hh%3==1)sum=max(sum,2);
        else if(hh%3==2)sum=max(sum,10);
        else sum=max(sum,7);
        hp-=sum;
    }
    cout<<--hh;
    return 0;
}