zoukankan      html  css  js  c++  java
  • BNU4204:动物PK

    稀奇稀奇真稀奇,动物园摆出了擂台赛。小动物们纷纷上台比试,谁能获得最后的冠军呢?
    动物园长发现小动物们打擂只与自身的三项属性有关:血量,攻击力和防御力。此外,小动物在赛前都为自己准备了一系列的攻击计划,计划按回合制定,包含攻击和格挡两种动作。计划的回合数是有限的,如果在完成计划中所有动作后,重复执行已经定下的计划。某小动物的血量等于或小于0时,该小动物退场,打擂结束。如果双方同时退场,那么为平局,否则未退场的一方胜。
    在某回合进行前,小动物A的当前血量为HPA,攻击力为ATA,防御力为DFA;小动物B的当前血量为HPB,攻击力为ATB,防御力为DFB。那么,这个回合结束时,可能出现如下4种情况:
    1、回合中小动物A执行攻击动作,小动物B执行格挡动作。回合结束后,小动物A的血量为min{HPA-(ATA-DFB), HPA},小动物B的血量为HPB-1;
    2、回合中小动物A执行格挡动作,小动物B执行攻击动作。回合结束后,小动物A的血量为HPA-1,小动物B的血量为min{HPB-(ATB-DFA), HPB};
    3、回合中小动物A与B同时执行攻击动作。回合结束后,小动物A的血量为min{HPA-(ATB-DFA), HPA},小动物B的血量为min{HPB-(ATA-DFB), HPB};
    4、回合中小动物A与B同时执行格挡动作。回合结束后,小动物A的血量为HPA,小动物B的血量为HPB。
     
    如,小猴与小猫进行比赛,属性如下:
      小猴 小猫
    血量 5 10
    攻击力 5 3
    防御力 5 3
     
     
    小猴的攻击序列为:1、攻击,2、格挡,3、攻击,4、格挡
    小猫的攻击序列为:1、攻击,2、攻击,3、格挡,4、格挡
     
    那么该局擂台赛的情况如下:
     
      小猴的血量 小猫的血量
    回合0(初始) 5 10
    回合1 5 8
    回合2 4 8
    回合3 2 7
    回合4 2 7
    回合5 2 5
    回合6 1 5
    回合7(游戏结束) -1 4
     
     
    此时,两个小动物跳上了擂台,他们谁能取得最后的胜利呢?

    Input

     输入包含4行。

    第一行包含3个整数HPA,ATA和DFA,为小动物A的三项基本属性:血量,攻击力和防御力。
    第二行为小动物A的攻击计划。首先为一个整数KA(KA<100),表示攻击计划包含KA个回合。接下来为KA个1或2,描述攻击计划中每一回合的动作,其中1表示攻击,2表示格挡。
    第三行包含3个整数HPB,ATB和DFB,为小动物B的三项基本属性:血量,攻击力和防御力。
    第四行为小动物B的攻击计划。首先为一个整数KB(KB<100),表示攻击计划包含KB个回合。接下来为KB个1或2,描述攻击计划中每一回合的动作,其中1表示攻击,2表示格挡。
     

    Output

     输出只有一行。

    若为平局,则输出"tie";
    若小动物A胜,则输出"A";
    若小动物B胜,则输出"B";
    我们保证,在1,000,000个回合内必定有小动物退场。
     

    Sample Input

    5 5 5
    4 1 2 1 2
    10 3 3
    4 1 1 2 2
    
     

    Sample Output

    B
    
     
    水题,直接模拟该过程即可
     
    #include <stdio.h>
    #include <string.h>
    #include <algorithm>
    using namespace std;
    
    int main()
    {
        int ahp,aatk,adef,bhp,batk,bdef;
        int a[105],b[105],i,j,na,nb;
        while(~scanf("%d%d%d",&ahp,&aatk,&adef))
        {
            scanf("%d",&na);
            for(i = 0; i<na; i++)
                scanf("%d",&a[i]);
            scanf("%d%d%d",&bhp,&batk,&bdef);
            scanf("%d",&nb);
            for(i = 0; i<nb; i++)
                scanf("%d",&b[i]);
            i = j = 0;
            while(ahp>0 && bhp>0)
            {
                if(a[i] == 1 && b[i] == 1)
                {
                    ahp = min(ahp-(batk-adef),ahp);
                    bhp = min(bhp-(aatk-bdef),bhp);
                }
                else if(a[i] == 1 && b[i] == 2)
                {
                    ahp = min(ahp-(aatk-bdef),ahp);
                    bhp--;
                }
                else if(b[i] == 1 && a[i] == 2)
                {
                    bhp = min(bhp-(batk-adef),bhp);
                    ahp--;
                }
                i++;
                j++;
                i%=na;
                j%=nb;
            }
            if(ahp<=0 && bhp<=0)
                printf("tie");
            else if(ahp<=0)
                printf("B");
            else
                printf("A");
            printf("
    ");
        }
    
        return 0;
    }
    
  • 相关阅读:
    struts2的@Result annotation 如何添加params,并且在页面取值
    spring @Entity @Table
    @Results( 中 params 怎么用
    Java三种技术架构
    python 内存管理
    wxpyhon 鼠标事件例子
    常用wxPython事件描述
    wxpython 拖动界面时进入假死状态(未响应)解决方法
    python 的一些高级编程技巧
    python 访问器@property的使用方法
  • 原文地址:https://www.cnblogs.com/fuhaots2009/p/3363581.html
Copyright © 2011-2022 走看看