5:魔兽世界之一:备战

这道题是典型的,看了题目不想做题系列。。。

题目太长,看了,看不懂。。。。后来,上网找了某博客中据说是老师的代码,研究了一下,觉得真的,c++面向对象编程还是很深奥的。。。。下面这段代码是在老师的代码的基础上修改了一下,搞了好久,总算过了。。。下面贴代码,过段时间,这学期老师代码正式贴在官网上了,再来补上老师的大作吧。。。

题目:

总时间限制: 1000ms 内存限制: 65536kB

描述

魔兽世界的西面是红魔军的司令部,东面是蓝魔军的司令部。两个司令部之间是依次排列的若干城市。
红司令部,City 1,City 2,……,City n,蓝司令部

两军的司令部都会制造武士。武士一共有 dragon 、ninja、iceman、lion、wolf 五种。每种武士都有编号、生命值、攻击力这三种属性。

双方的武士编号都是从1开始计算。红方制造出来的第n个武士,编号就是n。同样,蓝方制造出来的第n个武士,编号也是n。
武士在刚降生的时候有一个生命值。
在每个整点,双方的司令部中各有一个武士降生。
红方司令部按照iceman、lion、wolf、ninja、dragon的顺序循环制造武士。
蓝方司令部按照lion、dragon、ninja、iceman、wolf的顺序循环制造武士。
制造武士需要生命元。
制造一个初始生命值为m的武士,司令部中的生命元就要减少m个。
如果司令部中的生命元不足以制造某个按顺序应该制造的武士,那么司令部就试图制造下一个。如果所有武士都不能制造了,则司令部停止制造武士。
给定一个时间,和双方司令部的初始生命元数目,要求你将从0点0分开始到双方司令部停止制造武士为止的所有事件按顺序输出。
一共有两种事件,其对应的输出样例如下:
1) 武士降生
输出样例: 004 blue lion 5 born with strength 5,2 lion in red headquarter
表示在4点整,编号为5的蓝魔lion武士降生,它降生时生命值为5,降生后蓝魔司令部里共有2个lion武士。(为简单起见,不考虑单词的复数形式)注意,每制造出一个新的武士,都要输出此时司令部里共有多少个该种武士。
2) 司令部停止制造武士
输出样例: 010 red headquarter stops making warriors
表示在10点整,红方司令部停止制造武士
输出事件时:
首先按时间顺序输出;
同一时间发生的事件,先输出红司令部的,再输出蓝司令部的。
输入
第一行是一个整数,代表测试数据组数。
每组测试数据共两行。
第一行:一个整数M。其含义为, 每个司令部一开始都有M个生命元( 1 <= M <= 10000)。
第二行:五个整数,依次是 dragon 、ninja、iceman、lion、wolf 的初始生命值。它们都大于0小于等于10000。
输出
对每组测试数据,要求输出从0时0分开始,到双方司令部都停止制造武士为止的所有事件。
对每组测试数据,首先输出”Case:n” n是测试数据的编号,从1开始 。
接下来按恰当的顺序和格式输出所有事件。每个事件都以事件发生的时间开头,时间以小时为单位,有三位。
样例输入
1
20
3 4 5 6 7

样例输出

Case:1
000 red iceman 1 born with strength 5,1 iceman in red headquarter
000 blue lion 1 born with strength 6,1 lion in blue headquarter
001 red lion 2 born with strength 6,1 lion in red headquarter
001 blue dragon 2 born with strength 3,1 dragon in blue headquarter
002 red wolf 3 born with strength 7,1 wolf in red headquarter
002 blue ninja 3 born with strength 4,1 ninja in blue headquarter
003 red headquarter stops making warriors
003 blue iceman 4 born with strength 5,1 iceman in blue headquarter
004 blue headquarter stops making warriors
#include <iostream>
using namespace std;
const int WARRIOR_NUM = 5;
class Headquarter;
class Warrior{
private:int id;//总的编号int in_id;//这个武士在自己的类中的编号int health;//生命值int attack;//攻击力string name;//武士类型Headquarter *p;
public:friend class Headquarter;static string names[WARRIOR_NUM];static int R_B_name[2][WARRIOR_NUM];static int warrior_value[WARRIOR_NUM];Warrior(Headquarter *p_, int id_, int in_id_, string name_, int health_, int attack_);
};
Warrior::Warrior(Headquarter *p_, int id_, int in_id_,string name_, int health_=0, int attack_=0) {p=p_;id = id_;in_id = in_id_;health = health_;attack = attack_;name = name_;
}
string Warrior:: names[WARRIOR_NUM]={"dragon","ninja","iceman","lion","wolf"};
int Warrior::warrior_value[WARRIOR_NUM];
int Warrior::R_B_name[2][WARRIOR_NUM]={{2,3,4,1,0},{3,0,1,2,4}};class Headquarter{
private:string color;//队伍颜色int all_num_warrior;//总个数int warrior_type_num[WARRIOR_NUM];//每个类的分别的个数int value_all;//生命元值bool stopped;//这里控制是不是停止的int makingIndex;//记录一下现在在造第几个人Warrior* p_w[1000];//保存战士
public:Headquarter(string color_, int m_);~Headquarter();int getColor();int Produce(int nTime);
};
int Headquarter::getColor() {if(color=="red") return 0;else return 1;
}
Headquarter::Headquarter(string color_, int m_) {color = color_;value_all = m_;all_num_warrior=0;stopped=false;makingIndex=0;for (int i = 0; i < WARRIOR_NUM; ++i) {warrior_type_num[i]=0;}
}
Headquarter::~Headquarter() {for (int i = 0; i < all_num_warrior; ++i) {delete p_w[i];}
}int Headquarter::Produce(int nTime) {if(stopped) return 0;//拿到现在是那个阵营的人在造人int color_num = getColor();//这里是说,找到那个可以造的,就跳出循环,如果找了5次都没有,就说明,没有可以用的了int count=0;int dx;while(count<5){if(makingIndex==5) makingIndex=0;dx = Warrior::R_B_name[color_num][makingIndex];//要检测的那个武士在整体集合中的下标if(value_all>=Warrior::warrior_value[dx]){//找到可以造的了,跳出break;}makingIndex++;count++;
//        printf("\tdx is:%d\t", dx);}makingIndex++;if(count==5){//要跳出了printf("%03d %s headquarter stops making warriors\n",nTime, color.c_str());stopped=true;return 0;}//要造武士了。。。p_w[all_num_warrior] = new Warrior(this, all_num_warrior+1, warrior_type_num[dx]+1, Warrior::names[dx], 0, 0);all_num_warrior += 1;//武士的总数要加一warrior_type_num[dx]+=1;//那个武士的所在的下标的计数器要加一value_all -= Warrior::warrior_value[dx];//元值要减printf("%03d %s %s %d born with strength %d,%d %s in %s headquarter\n", nTime, color.c_str(),Warrior::names[dx].c_str(), all_num_warrior, Warrior::warrior_value[dx],warrior_type_num[dx], Warrior::names[dx].c_str(), color.c_str());return 1;
}int main(){int n;scanf("%d", &n);int nn = n;while(n--){printf("Case:%d\n", nn-n);int m;//这里是初始的生命元scanf("%d", &m);Headquarter R_H("red", m);Headquarter B_H("blue", m);for (int i = 0; i < WARRIOR_NUM; ++i) {scanf("%d", &Warrior::warrior_value[i]);}int nTime=0;while(true){int tmp1 = R_H.Produce(nTime);int tmp2 = B_H.Produce(nTime);if(tmp1==0 && tmp2==0) break;nTime++;}}return 0;
}

mooc程序设计与算法(三)C++面向对象程序设计 类和对象提高 编程作业 5:魔兽世界之一:备战相关推荐

  1. 程序设计与算法三~C++面向对象程序设计~北大郭炜MOOC学习笔记~第二章:类和对象初步(新标准C++程序设计)

    以下内容为笔者手打,望读者珍惜,如有转载还请注明. chapter2:类和对象初步 数据结构+算法=程序 $2.1结构化程序设计的不足     结构化程序设计也称面向过程的程序设计,过程是用函数实现的 ...

  2. 程序设计与算法三~C++面向对象程序设计~北大郭炜MOOC学习笔记~第三章:类和对象进阶(新标准C++程序设计)

    以下内容为笔者手打,望读者珍惜,如有转载还请注明. chapter 3:类和对象进阶 $3.1构造函数 $3.1.1 构造函数的概念和作用     全局变量在程序装入内存时就已经分配好了存储空间,程序 ...

  3. 程序设计与算法三~C++面向对象程序设计~北大郭炜MOOC学习笔记~第五章:继承与派生(新标准C++程序设计)

    以下内容为笔者手打,望读者珍惜,如有转载还请注明. 第五章 继承与派生 $5.1 继承与派生的概念 $5.1.1 基本概念     在C++中,当定义一个新的类B时,如果发现类B拥有某个已经写好的类A ...

  4. 程序设计与算法三~C++面向对象程序设计~北大郭炜MOOC学习笔记chapter1第一章(新标准C++程序设计)

    以下内容为笔者手打,望读者珍惜,如有转载还请注明. $1.4强制类型转化运算符的新形式:     类型名(待转化的表达式),如double(a),int(3.5) $1.5函数参数的默认值     在 ...

  5. 20145206《Java程序设计》实验二Java面向对象程序设计实验报告

    20145206<Java程序设计>实验二Java面向对象程序设计实验报告 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉S.O. ...

  6. MOOC程序设计入门——C语言(翁恺)第五周编程作业“念整数”

    MOOC程序设计入门--C语言(翁恺)第五周编程作业"念整数" ****念整数 题目内容: 你的程序要读入一个整数,范围是[-100000,100000].然后,用汉语拼音将这个整 ...

  7. python【面向对象(类和对象)】

    1.面向对象(类和对象) 1.编程思维 根据面对问题不同人呈现出来的思维模式不同,可以将编程思维分为三种: 1.面向过程编程(穷人思想)-- 会基本的逻辑和语法(遇到问题马上想到的是解决问题的具体逻辑 ...

  8. Java-入门之面向对象以及类和对象的概念(一)

    面向对象,类,对象? 前言:只有光头才能变强! 一:面向对象 当我们初学java时,扑面而来的一个词就是面向对象,那什么是面向的对象呢 ? 在说面向对象之前,大家先要知道对象是什么,如果你脑子里第一想 ...

  9. 谈谈对面向对象、类、对象的了解

    谈谈对面向对象.类.对象的了解 面向对象 强调具备了功能的对象,以类 / 对象为最小单位,考虑让谁来做. 面向对象编程语言中都有类的概念,代码的组织靠类(代码的最小组织单位是类),面向对象编程中执行一 ...

最新文章

  1. k-d tree算法的研究
  2. hadoop错误: 找不到或无法加载主类 org.apache.hadoop.mapreduce.v2.app.MRAppMaster
  3. c语言两字符串转数字后相加,一个觉得很难的C语言问题。对两个数字字符串相加。 C语言 如何把一个字符串中相连的两个数字转化为一......
  4. 根据经纬度计算范围_地理计算专题(上)
  5. eclipse 对齐行号在括号中显示和字体调整
  6. php启用openssl,php怎么开启openssl模块
  7. 咨询14个CEO,花了20小时,建设顶级数据团队的干货,被疯狂点赞
  8. Spring 2.5新特性及架构图
  9. python threading.Condition
  10. 自定义 Web 服务器控件
  11. XSS注入,js脚本注入后台
  12. mysql碎片处理_mysql优化数据库和mysql数据库碎片处理
  13. php1到5000排序,php排序1亿个号码
  14. python备注(持续更新……)
  15. viper4android哪个版本好,viper4android免root版下载
  16. SpringBoot+Vue项目外卖点餐系统
  17. 广域网用什么软件可以更好地传输大文件和海量文件?
  18. 阿基里斯与乌龟的悖论
  19. 被历史遗忘的第一骑兵名将 —— 陈庆之
  20. 记一次安装 ubuntu 18.04 双系统 (双硬盘)

热门文章

  1. 假设检验 - 区间估计(总体标准差未知)
  2. Html5学习------canvas绘制径向渐变图形
  3. GitHub 上值得收藏的 100 个精选前端项目!
  4. 【iOS】仿写iOS计算器总结
  5. Prometheus:Java调用PromQL工具类(瞬时数据查询)
  6. 「项目进度管理」如何编制有效的进度计划?
  7. VUE项目学习系列博文
  8. 2020湖南省技能竞赛获奖名单_心理知识竞赛获奖名单新鲜出炉
  9. js网页繁体简体转换(备忘)
  10. 500套优秀简历模板,送给您!