【GZOJ】1374——口袋妖怪对战

原创 2015年11月18日 20:03:20

题目链接广大OJ1374
本题亦为广大15级第一次周赛的I题。

题目内容

Problem Description
一年一度的口袋妖怪大赛开始了!!!

现在是四天王之一的渡对战传说中的训练师帽子!!!

渡的快龙使用了大字爆!

帽子的帕路奇犽正面接下了这一击!!!

帽子的帕路奇犽竟然毫发无损!!!

接下来的战斗会怎样呢!!!胜利的天平会往哪一位倾斜呢!!!

。。。。。。

与其等待结果,不如让我们来预测一下比赛结果吧。

现在我们可以知道双方的数据,包括名字 血量 攻击力 防御力 速度 技能威力 属性相克(例如说 属性相克为x2 就表示攻击方攻击防御方的伤害有2倍修正)

属性相克只有6种:x1,x2,x4,x0,x1/2,x1/4

接着是伤害的计算公式。口袋妖怪的伤害计算公式比较复杂,这里对其进行简化:

伤害=(攻击方攻击力×42×技能威力÷防御方防御力÷50+2)×属性相克

所有变量应按int类型的方式来计算,属性相克的x1/2和x1/4按除以2和除以4来计算。也就是说伤害的计算结果一定为整数。

在这里如果伤害计算结果是0的话要修正为1,就算是属性相克为x0也一样。

对战是回合制的类型,速度快的(速度的值比较大的)先手。

当速度一样时默认第一只口袋妖怪先攻击。

由于存在先后攻击顺序,所以不可能有平局的情况出现。

假设每次攻击都会命中,现在,给你这些数据,告诉我谁会胜利。

Input
输入的第一行包括一个整数n(1<=n<=10000),表示有n场对战需要计算。

接下有n组数据,每组数据占两行

每组数据的第一行为第一只口袋妖怪的数据,第二行为第二只口袋妖怪的数据。

每只口袋妖怪的数据包括名字(一个长度不超过20的字符串),血量h(1<=h<=10000),攻击力a(1<=a<=2000),防御力d(1<=d<=2000),速度s(1<=s<=2000),技能威力p(1<=p<=255),以及属性相克(只有六种,分别为:x1,x2,x4,x0,x1/2,x1/4)。分别用空格隔开。

Output
对于每组输入数据,输出谁会胜利。格式参照样例。
Sample Input
2
Palkia 384 372 220 184 100 x2
Dragonite 292 328 175 284 110 x1/4
Pi 100 100 200 300 1 x1/2
pi 100 200 100 200 1 x1/2
Sample Output
Round #1 : Palkia win!
Round #2 : Pi win!
Hint
善用scanf和printf

解题思路

其实这就是一道比较繁琐的入门题,只要耐下心来做就能够完成的。
首先,利用这些数据和公式算出双方每回合会受到的伤害
注意计算的时候不要用double要用int,而且当结果为0时记得修正为1。
其次,再算出双方分别能坚持的回合数
然后通过回合数计算即可。
具体的参照代码。

代码

#include<cstdio>
#include<string>
using namespace std;
struct pokemon//该结构体用于存放口袋妖怪的数据
{
    string name;
    int hp,atk,def,spd,pow;
    int k;//用于表示属性相克的种类
};
int main()
{
    int n;
    scanf("%d",&n);
    for(int t=1;t<=n;t++)
    {
        pokemon a,b;
        string s;
        char c[20];
        scanf("%s",c);
        a.name=c;
        scanf("%d%d%d%d%d",&a.hp,&a.atk,&a.def,&a.spd,&a.pow);
        scanf("%s",c);
        s=c;
        if(s=="x1")a.k=1;
        else if(s=="x2")a.k=2;
        else if(s=="x4")a.k=4;
        else if(s=="x0")a.k=0;
        else if(s=="x1/2")a.k=8;
        else if(s=="x1/4")a.k=9;
        scanf("%s",c);
        b.name=c;
        scanf("%d%d%d%d%d",&b.hp,&b.atk,&b.def,&b.spd,&b.pow);
        scanf("%s",c);
        s=c;
        if(s=="x1")b.k=1;
        else if(s=="x2")b.k=2;
        else if(s=="x4")b.k=4;
        else if(s=="x0")b.k=0;
        else if(s=="x1/2")b.k=8;
        else if(s=="x1/4")b.k=9;
        int ha=42*b.atk*b.pow;//第一只口袋妖怪每回合会受到的伤害
        ha/=a.def;
        ha/=50;
        ha+=2;
        if(b.k==8)ha/=2;
        else if(b.k==9)ha/=4;
        else ha*=b.k;
        int hb=42*a.atk*a.pow;//第二只口袋妖怪每回合会受到的伤害
        hb/=b.def;
        hb/=50;
        hb+=2;
        if(a.k==8)hb/=2;
        else if(a.k==9)hb/=4;
        else hb*=a.k;
        if(ha==0)ha=1;
        if(hb==0)hb=1;
        int ra=a.hp/ha,rb=b.hp/hb;//这个是计算双方存活的回合数
        if(a.hp%ha!=0)ra++;
        if(b.hp%hb!=0)rb++;
        bool ans;//答案判断变量,若第一只赢为真,第二只赢为假
        if(ra>rb)ans=true;
        else if(ra<rb)ans=false;
        else if(a.spd>=b.spd)ans=true;
        else ans=false;
        printf("Round #%d : ",t);
        if(ans)printf("%s win!\n",a.name.c_str());
        else printf("%s win!\n",b.name.c_str());
    }
}
版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

HDU 3979 Monster(中等贪心)

这道题思考了一个小时,参考过代码,,,认真整理了思路,,本题的题意大致如下:一个游侠和多个怪兽决斗,怎么样击杀怪兽会使游侠的耗血最少。这其中的关键是怪兽不会一个一个的跟你打,他们也不傻,他们对你群殴,...

Vive前置摄像头支线1——利用Vive做《口袋妖怪》啦

这几天口袋妖怪火的不行,突然想到Vive不是自带前置摄像头吗,赶紧用起来啊!于是找了些资源,试了试,就做出了下面这个。 感谢Unity酱和自己的友情出演!! Ok 废话不多说直接切入主题,程序员们想想...

安卓手机上玩口袋妖怪gba全集的方法

最近想起以前小时候玩口袋妖怪的回忆,想在自己的手机上玩一下口袋妖怪,发现手机市场的搜到的不是崩溃,就是广告多到爆。偶然在一个论坛发现一个口袋妖怪的合集,太高兴了哈哈。 废话少说,上截图 ...

《口袋妖怪》超级素材包

  • 2014年02月19日 23:00
  • 39.82MB
  • 下载

点趣苹果助手:非苹果独占 口袋妖怪GO将登录安卓手表

点趣苹果助手:在iPhone7的发布会上,迎来了《口袋妖怪GO》登录Apple Watch的消息。不过,游戏的开发商Niantic也正打算将这一增强现实(AR)游戏打入另一种人群:Android We...

discuz口袋妖怪插件

  • 2015年12月02日 17:09
  • 6.68MB
  • 下载

【转】口袋妖怪的一些小图标

  • 2014年01月30日 21:01
  • 49KB
  • 下载

口袋妖怪金心银魂详细图文攻略(上)及游戏下载

作为一款复刻作品,《口袋妖怪金心银魂》时隔多年后在nds平台上的复刻让这款作品更加的完美,出色的游戏画面,更加细致和人性化的系统,更便捷的操作,当然也少不了游戏丰富的游戏流程和各种要素,下面就给大家带...

c++大作业--- 口袋妖怪

  • 2012年06月03日 14:00
  • 70KB
  • 下载

2月1日发布完毕!口袋妖怪音乐专辑“一日一专辑”发布计划

2月1日发布完毕!口袋妖怪音乐专辑“一日一专辑”发布计划(1997-2011)-本帖最后由 jiagm 于 2011-2-1 19:45 编辑 注:即日起本发布计划在tgbus将在这一专帖进行更新,敬...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:【GZOJ】1374——口袋妖怪对战
举报原因:
原因补充:

(最多只允许输入30个字)