问题描述
小蓝正在玩一个游戏,游戏中小蓝要控制自己的三个英雄来攻击一个敌人。敌人初始的血量为 20252025。
小蓝的第一个英雄攻击力恒定,每回合攻击 55 的血量。
小蓝的第二个英雄拥有一些技能,奇数回合触发,攻击 1515 的血量,偶数回合攻击 22 的血量。
小蓝的第三个英雄拥有一些道具,当回合数除以 33 的余数为 11 时攻击 22 的血量;当回合数除以 33 的余数为 22 时攻击 1010 的血量;当回合数除以 33 的余数为 00 时攻击 77 的血量。
游戏从第 11 回合开始。不考虑敌人对小蓝英雄的攻击,敌人的血量也仅受攻击的影响。如果敌人的血量小于等于零,则游戏结束。
请问到第几回合游戏结束?
解题思路
1. 直接模拟每一回合,用 count 记录当前回合
2. 根据当前回合,分别算出英雄二(b)、英雄三(c)这一轮的伤害
3. 三个英雄伤害加起来,扣掉敌人血量,判断血量是否小于等于 0,如果满足直接跳出循环
4. 如果没扣完,回合数 +1,继续下一轮
完整代码
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
int n=2025;//初始血量
int count=1;//回合数
int a=5,b,c;//a英雄攻击力恒定,可以直接给定量
while(n>0)//当敌人血量归0结束攻击
{
if(count%2!=0)
{
b=15;
}
else
{
b=2;
}
if(count%3==1)
{
c=2;
}
else if(count%3==2)
{
c=10;
}
else if(count%3==0)
{
c=7;
}
n=n-(a+b+c);//血量减去攻击
if(n<=0)//必须写在回合数加之前,如果在这一回合血量就攻击完了是直接结束
{
break;
}
count++;
}
printf("%d\\n",count);
return 0;
}
踩坑记录
重点:一定要把判断写在回合数加之前,不然退出循环会多加一次,而且这个判断条件必须要写


实现100%通过率-171主机测评](https://www.171host.com/wp-content/uploads/2026/10/20261026191216-6adfa61015a7f-220x80.gif)
