2021-10-15

我的魔法会把你撕成碎片

【问题描述】

Alice和Bob在玩一款叫做“HS”的卡牌对战游戏,游戏大体规则如下:

每个玩家初始生命值(LP)为30,生命值上限为30,玩家可以在游戏中通过一些手段削弱对手的生命值,也可以回复自己的生命值,当一个玩家的生命值被降至0点及以下时,该玩家失败,对手胜利。

现在给出共n个操作,操作分为两种,按顺序执行

1:将Alice的生命值加上x

2:将Bob的生命值加上x

(x可能为负数,|x|<=30)

若第一次出现某次操作后,某一玩家的生命值被降至0点及以下,则该玩家失败,对手胜利,游戏结束。

为了方便起见,当n个操作结束后,若无人死亡,则为平局,游戏结束。

最后,Alice想知道最后游戏结束时,双方的生命值分别为多少,以及游戏的结果,你能告诉她吗?

【输入形式】

第一行一个整数 n (n≤1000)代表有n个操作

接下来n行, 每行两个数字 p q ,表示一个操作,具体如下:

操作1 : 格式 0 p 表示Alice的生命值+p

操作2 : 格式 1 q 表示Bob的生命值+q

【输出形式】

第一行输出一个字符串,”Alice” 或 “Bob” 或 “Draw“

若Alice获胜,则输出 “Alice” (注意不包含引号)

若Bob获胜,则输出 “Bob”

若双方平局,则输出 ”Draw”

接下来一行输出两个整数A,B

分别代表游戏结束时Alice和Bob的生命值

【样例输入1】

4

1 -10

1 -10

0 10

1 -20

【样例输出1】

Alice

30 -10

【样例输入2】

10

0 -10

1 -10

0 -20

0 -29

1 -13

0 -3

0 10

1 20

1 -1

0 6

【样例输出2】

Bob

0 20

【样例输入3】

3

0 -1

1 -1

0 1

【样例输出3】

Draw

30 29

【样例解释】

对于样例1,双方血量变动如下

30,30-- Bob-10 -->30,20

30,20-- Bob-10 -->30,10

30,10-- Alice+10 -->30,10(血量上限为30)

30,10-- Bob-20 -->30,-10,Alice获胜.

对于样例2,双方血量变动如下

30,30-- Bob-10 -->30,20

30,30-- Alice-10 -->20,20

30,30-- Alice-20 -->0,20

此时bob获胜,游戏结束

【数据范围】

n<1000 , |x|<=30

【时空限制】

1000ms 64MB

完整代码

#include<stdio.h>
int main()
{
  int Alice=30;
  int  Bob=30;
  int n;//操作次数
  int i;
  int flag;//格式
  int p,q;
  scanf("%d",&n);
  for(i=0;i<n;i++)
  {
    scanf("%d",&flag);
     if (flag == 0)
      {
        scanf("%d",&p);
        Alice =Alice+p;
        if (Alice>30)
         Alice = 30;
        if (Alice<=0)
         break;
      }
    else 
      {
        scanf("%d",&q);
        Bob =Bob+q;
        if (Bob>30)
         Bob = 30;
        if (Bob<=0)
         break;
      }
 }

if(Alice >0 && Bob>0)
	printf("Draw\n %d %d",Alice,Bob);
  else if (Alice > Bob)
	printf("Alice\n %d %d",Alice,Bob); 
    else 
	printf("Bob\n %d %d",Alice,Bob);
	return 0;
}

运行结果
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值