玩家杀boss,玩家有普通攻击和魔法攻击
boss 有普通攻击和暴击
求玩家战胜boss的最小回合数
#include<stdio.h>
#include<string.h>
void fight(int a[3],int *fight_time,int *win)
{
int atmp=100000;
//血多直接魔法上
while(a[2]>=120){
int i=0;
for(i=0;i<7;i++){
atmp=a[0];
(*fight_time) ++;
if( (*fight_time) % 5 == 0){
//printf("%d,baoji\n",*fight_time);
a[0]-=30;
}
else
a[0]-=10;
}
a[2]-=120;
}
if(atmp!=100000 && atmp>0 && a[2]<=0){
*win=1;
return;
}
if(atmp!=100000 && atmp<=0 && a[2]<=0){
*win=-1;
return;
}
//printf("%d,%d,%d\n",a[0],a[1],a[2]);
if( (*win) == -1 || (*win) == 1 )
return;
if(a[2]>0 && a[0]<=0){
*win = -1;
return;
}
if(a[2]<=0){
*win = 1;
return;
}
(*fight_time)++;
//bossHp<=17,普攻
if(a[2]<=17){
(*win) = 1;
return;
}
//玩家魔法攻击
if(a[1]>=10){
a[1]-=10;
a[2]-=60;
}
//玩家续魔法
else if(a[1]>=6){
a[1]+=4;
}
//玩家考虑是否续魔法
else if(a[1]>=2){
if(a[2] <= 34){
a[2]-=17;
}
else{
a[1]+=4;
}
}
else{
a[2]-=17;
}
//boss普通攻击
if( (*fight_time) %5 == 0){
a[0]-=30;
}
else
a[0]-=10;
fight(a,fight_time,win);
return;
}
int main(void)
{
int stuHP,stuPower,bossHP;
scanf("%d%d%d",&stuHP,&stuPower,&bossHP);
int a[3];
a[0]=stuHP,a[1]=stuPower,a[2]=bossHP;
int fight_time=0,win=0;
int i=0;
while(a[1]>=10){
fight_time++;
a[2]-=60;
if( (fight_time) %5 == 0){
a[0]-=30;
}
else
a[0]-=10;
a[1]-=10;
}
fight(a,&fight_time,&win);
if(win==-1)
printf("-1");
else
printf("%d",fight_time);
//printf("%d,%d",fight_time,win);
return 0;
}
结果如下
还有点瑕疵,可以自己改一下