以我开卡包的水平这游戏只能叫炉石稀有
问题描述  
本题所使用的炉石传说游戏的简化规则如下:

* 玩家会控制一些角色,每个角色有自己的生命值和攻击力。当生命值小于等于 0 时,该角色死亡。角色分为英雄和随从。

* 玩家各控制一个英雄,游戏开始时,英雄的生命值为 30,攻击力为 0。当英雄死亡时,游戏结束,英雄未死亡的一方获胜。

* 玩家可在游戏过程中召唤随从。棋盘上每方都有 7 个可用于放置随从的空位,从左到右一字排开,被称为战场。当随从死亡时,它将被从战场上移除。

* 游戏开始后,两位玩家轮流进行操作,每个玩家的连续一组操作称为一个回合。

* 每个回合中,当前玩家可进行零个或者多个以下操作:

1) 召唤随从:玩家召唤一个随从进入战场,随从具有指定的生命值和攻击力。

2) 随从攻击:玩家控制自己的某个随从攻击对手的英雄或者某个随从。

3) 结束回合:玩家声明自己的当前回合结束,游戏将进入对手的回合。该操作一定是一个回合的最后一个操作。

* 当随从攻击时,攻击方和被攻击方会同时对彼此造成等同于自己攻击力的伤害。受到伤害的角色的生命值将会减少,数值等同于受到的伤害。例如,随从 X 的生命值为 HX、攻击力为 AX,随从 Y 的生命值为 HY、攻击力为 AY,如果随从 X 攻击随从 Y,则攻击发生后随从 X 的生命值变为 HX - AY,随从 Y 的生命值变为 HY - AX。攻击发生后,角色的生命值可以为负数。

本题将给出一个游戏的过程,要求编写程序模拟该游戏过程并输出最后的局面。
  
样例输入
8

summon 1 3 6

summon 2 4 2

end

summon 1 4 5

summon 1 2 1

attack 1 2

end

attack 1 1
样例输出
0
30
1 2
30
1 2

思路
是一个vector的入门题,考虑到随从的召唤和阵亡,vector的插入和删除十分方便。另外,把英雄看作一个30血0攻的大随从,双方各开一个vector来模拟对战过程就解决了。结束回合操作可以利用位运算,id直接取反或者与1异或都是很常见的方法。

#include <iostream>
#include <vector>
#include <string>
#include <cstdio>
#include <cstring>
#define ll long long
using namespace std;struct Hero{//应该是随从minion的,英语水平emmint health;int atkrack;Hero(int h, int a) : health(h), atkrack(a) {}
};vector<Hero> player[2];int main()
{int n;cin >> n;int pid = 0;player[0].push_back(Hero(30, 0));player[1].push_back(Hero(30, 0));for(int i=1; i<=n; i++){string q;cin >> q;if(q == "summon") {int pos, hp, atk;cin >> pos >> atk >> hp;player[pid].insert(player[pid].begin()+pos, Hero(hp, atk));}else if(q == "attack"){int atkr, defr;cin >> atkr >> defr;player[pid][atkr].health -= player[!pid][defr].atkrack;player[!pid][defr].health -= player[pid][atkr].atkrack;if(player[pid][atkr].health <= 0 && atkr!=0){player[pid].erase(player[pid].begin()+atkr);}if(player[!pid][defr].health <= 0 && defr!=0){player[!pid].erase(player[!pid].begin()+defr);}}else if(q == "end"){pid = !pid;}}if(player[0][0].health>0 && player[1][0].health>0) cout << 0 << "\n";else if(player[0][0].health>0) cout << 1 << "\n";else cout << -1 << "\n";for(int i=0; i<2; i++){cout << player[i][0].health << "\n";cout << player[i].size()-1 << " ";for(int j=1; j<player[i].size(); j++){cout << player[i][j].health << " ";}cout << endl;}
}

程序设计思维月模拟题2-CSP201609-3 炉石传说相关推荐

  1. 作业Week9、10+月模拟题3、4+CSP3、4+限时大模拟10、14

    CSP3 A-瑞神的序列 1.题意:瑞神的数学一向是最好的,连强大的咕咕东都要拜倒在瑞神的数学水平之下,虽然咕咕东很苦 恼,但是咕咕东拿瑞神一点办法都没有. 5.1期间大家都出去玩了,只有瑞神还在孜孜 ...

  2. c语言程序二级模拟试卷,C语言程序设计二级考试模拟题集.doc

    C语言程序设计二级考试模拟题集 (6套试题) 全国高校联合计算机等级考试广西考区 非计算机专业学生计算机水平考试(二级C语言)模拟试卷1 (本试卷包括第一卷和第二卷,答卷时间总共120分钟) 第一卷 ...

  3. 程序设计思维与实践月模拟题X3

    这里写目录标题 201604-3 路径解析 题目 思路 代码 201609-3 炉石传说 题目 思路 代码 201809-3 元素选择器 题目 思路 代码 201604-3 路径解析 题目 在操作系统 ...

  4. 程序设计思维与实践 月模拟题3 Blog

    CSP-201609-3炉石传说 题目具体描述不再粘贴,如有需要可参照CSP模拟考试网址. CSP模拟考试网址 题目分析 首先构建结构体role用来保存英雄/随从,包含生命值和攻击力两个变量,这样两名 ...

  5. week11——实验(月模拟题3:CSP201609 03)

    目录 炉石传说 : 问题描述 题目简述 输入/输出格式 样例 问题分析 解题思路 AC代码 心得体会 炉石传说 : 问题描述 题目简述 <炉石传说:魔兽英雄传>(Hearthstone: ...

  6. 2016小码哥杯java程序设计竞赛赛前模拟题

    java程序设计赛前模拟题 一.单选题:(45分) 15题单选题,每题3分 第1题 单项选择题     代码片段: System.out.format("Pi is approximatel ...

  7. SDU月模拟题CSP201609-3炉石传说

    问题描述 <炉石传说:魔兽英雄传>(Hearthstone: Heroes of Warcraft,简称炉石传说)是暴雪娱乐开发的一款集换式卡牌游戏(如下图所示). 游戏在一个战斗棋盘上进 ...

  8. 月模拟题3 201609-3 炉石传说

    炉石传说 题意 <炉石传说:魔兽英雄传>(Hearthstone: Heroes of Warcraft,简称炉石传说)是暴雪娱乐开发的一款集换式卡牌游戏(如下图所示).游戏在一个战斗棋盘 ...

  9. c语言运行后出现xt073,2017年北京工业大学城市交通学院894C语言与数据结构之C程序设计考研强化模拟题...

    一.选择题 1. 若变量已正确定义为int 型,要通过语句 □代表一个空格符)给a 赋值1.给b 赋值2.给c 赋值3, 以下输入形式中错误的是(注:( ). A. B. C. D. [答案]D [解 ...

最新文章

  1. csharp:Learn how to post JSON string to generic Handler using jQuery in ASP.Net C#.
  2. Docker容器的导出和导入
  3. 隐藏快捷方式扩展名(.lnk)
  4. C++指针数组、数组指针、数组名及二维数组技巧汇总
  5. BAPI_PO_CREATE1
  6. “威胁情报”在手,反黑客终于有地图了!
  7. mysql中查询出现的错误_在MySQL查询中查询语法错误
  8. 128.Two Sum
  9. VS2005里自定义控件设计时语法
  10. CamRaptor:针对DVR摄像头的漏洞利用工具
  11. 抽象类、接口、内部类
  12. 单片机(ISIS 7 Professional):简易8x8矩阵LED灯代码项目
  13. 软考网络工程师下午题知识点汇总
  14. PCB Layout 中的直角走线、差分走线和蛇形线
  15. 新版在线全网音乐搜索下载源码
  16. Http——Post上传文件并传递其他参数信息
  17. 2020.12.28用isprime函数判断m是否为素数
  18. (转)格拉布斯准则(Grubbs Criterion)处理数据异常
  19. 查看linux主机多少位,linux怎么查看系统是32位还是64位的方法
  20. 基于c语言的哈希表电话簿

热门文章

  1. android做试卷的页面,《Android UI界面设计》17移动互联网A卷试题和答案(3页)-原创力文档...
  2. c语言的取整和取余符号(三位数每一位数怎样求)
  3. Pandas武功修炼秘籍(第一章:初见端倪)
  4. Truck History prime
  5. 百度云管家使用QQ第三方登录时提示“由于网络原因无法载入页面 请点击刷新后重试”
  6. 雪花算法——分库分表情况下id解决方案
  7. 人机交互设备(HID)
  8. Unity游戏设计与实现 南梦宫一线程序员的开发实例pdf
  9. 学计算机买笔记本是i5 i7,对我们普通人买电脑来说,i7和i5、i3有多大区别,玩游戏选哪款好?!...
  10. 堆糖瀑布流完整解决方案(jQuery)