【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());
    }
}
版权声明:本文为博主原创文章,未经博主允许不得转载。

剖析《口袋妖怪复刻版》技术架构

剖析《口袋妖怪复刻版》技术架构前言由于一次偶然的机会,使我发现了一款国内目前为止我认为对Pokemon还原度较高的一款产品——《口袋妖怪复刻版》。这款游戏无论是战斗画面,画风,技能,甚至是宠物的叫声,...
  • RexGene
  • RexGene
  • 2016年08月23日 00:00
  • 455

人人对战版五子棋

最近花了点时间把以前写的五子棋做成了可以联网的!! 主要思想是这样的: 黑棋先,黑棋先把自己的棋子的x y值传到服务器,然后在由服务器传送到第二个客户端,同意白棋也是这么做的。 服务器端的功能就...
  • yj1499945
  • yj1499945
  • 2015年04月28日 11:42
  • 1836

五子棋人机对战的实现

最近我一直在编写五子棋的AI,但是搞了这么长时间,棋力一直停留在比较水的阶段,难以有什么比较好的突破。不知道贴吧里有没有别的朋友研究过类似的问题,于是想到来贴吧讨论一下。 我的程序主要遵循如下思路:...
  • u012706792
  • u012706792
  • 2014年11月21日 16:50
  • 8674

宝可梦火红存档修改器

花了好久的功夫,终于把宝可梦火红的存档修改器编完了。实现了包括训练师姓名、ID、金钱、宝可梦种族、技能、物品等属性的修改。我把宝可梦火红的GBA文件、模拟器,还有我编写的修改器都打包上传到百度网盘了。...
  • yangxiao_0203
  • yangxiao_0203
  • 2013年07月17日 20:17
  • 9954

仿王者荣耀对战资料选项中的【雷达网图展示详细数据】

听朋友说【王者荣耀】挺火的让我也下载,没事的时候一块玩几局(这里不是打广告啊,毕竟我不是腾讯的员工,大写的尴尬。。。),当我查看个人资料的时候,看到有对战资料选项,对战的详细数据是以雷达网图的形式、圆...
  • xiaxiazaizai01
  • xiaxiazaizai01
  • 2017年03月29日 14:26
  • 2416

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

DNS《口袋妖怪:心灵之金》ACG汉化简体中文版 http://www.400gb.com/file/71654976   DNS《口袋妖怪:灵魂之银》ACG汉化简体中文版 http://ww...
  • j294956386
  • j294956386
  • 2014年08月25日 16:18
  • 3154

为什么FPS对射的时候要来回跑--valve的多人对战同步技术

介绍了source引擎在多人对战网络同步(尤其是用于fps游戏)中的做法,在行业内影响了很多多人对战游戏的开发。 在了解了其中的技术和概念之后,对于玩家来说,就会知道为什么fps游戏对射的时候不要静止...
  • ccanan
  • ccanan
  • 2016年11月20日 21:46
  • 2455

天梯匹配系统 - 简单实现

最近利用业余时间开发一个支持多人对战游戏的天梯匹配系统,纯粹练手之用。该天梯系统需要满足以下要求 1. 有单人对战和多人对战模式,例如从1v1到5v5 2. 每个人都有两个天梯分,分别是1v1的天...
  • LoveIsASea
  • LoveIsASea
  • 2016年05月29日 21:34
  • 3484

【九度OJ】题目1047:素数判定 解题报告

【九度OJ】题目1047:素数判定 解题报告标签(空格分隔): 九度OJ原题地址:http://ac.jobdu.com/problem.php?pid=1047题目描述:给定一个数n,要求判断其是否...
  • fuxuemingzhu
  • fuxuemingzhu
  • 2017年03月07日 11:29
  • 211

Android 蓝牙对战五子棋项目实现(含人机对战功能)

上周花了一周时间做的课程设计的项目,实现的功能如下:  基本功能: (1) 该APP能够通过蓝牙自动搜索周围其他使用了该APP的手机,用户可选择其中某一个APP发起对战的要求,被发起方可以同意或者...
  • qq_22770457
  • qq_22770457
  • 2016年06月09日 17:28
  • 5133
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:【GZOJ】1374——口袋妖怪对战
举报原因:
原因补充:

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