return0;
}
编程题#2:
魔兽世界之二:
装备
描述
魔兽世界的西面是红魔军的司令部,东面是蓝魔军的司令部。
两个司令部之间是依次排列的若干城市。
红司令部,City1,City2,……,Cityn,蓝司令部
两军的司令部都会制造武士。
武士一共有dragon、ninja、iceman、lion、wolf五种。
每种武士都有编号、生命值这两种属性。
有的武士可以拥有武器。
武器有三种,sword,bomb,和arrow,编号分别为0,1,2。
双方的武士编号都是从1开始计算。
红方制造出来的第n个武士,编号就是n。
同样,蓝方制造出来的第n个武士,编号也是n。
不同的武士有不同的特点。
dragon可以拥有一件武器。
编号为n的dragon降生时即获得编号为n%3的武器。
dragon还有“士气”这个属性,是个浮点数,其值为它降生后其司令部剩余生命元的数量除以造dragon所需的生命元数量。
ninjia可以拥有两件武器。
编号为n的ninjia降生时即获得编号为n%3和(n+1)%3的武器。
iceman有一件武器。
编号为n的iceman降生时即获得编号为n%3的武器。
lion有“忠诚度”这个属性,其值等于它降生后其司令部剩余生命元的数目。
wolf没特点。
请注意,在以后的题目里,武士的士气,生命值,忠诚度在其生存期间都可能发生变化,都有作用,武士手中的武器随着使用攻击力也会发生变化。
武士在刚降生的时候有一个生命值。
在每个整点,双方的司令部中各有一个武士降生。
红方司令部按照iceman、lion、wolf、ninja、dragon的顺序循环制造武士。
蓝方司令部按照lion、dragon、ninja、iceman、wolf的顺序循环制造武士。
制造武士需要生命元。
制造一个初始生命值为m的武士,司令部中的生命元就要减少m个。
如果司令部中的生命元不足以制造某个按顺序应该制造的武士,那么司令部就试图制造下一个。
如果所有武士都不能制造了,则司令部停止制造武士。
给定一个时间,和双方司令部的初始生命元数目,要求你将从0点0分开始到双方司令部停止制造武士为止的所有事件按顺序输出。
一共有两种事件,其对应的输出样例如下:
1)武士降生
输出样例:
004bluelion5bornwithstrength5,2lioninredheadquarter
表示在4点整,编号为5的蓝魔lion武士降生,它降生时生命值为5,降生后蓝魔司令部里共有2个lion武士。
(为简单起见,不考虑单词的复数形式)注意,每制造出一个新的武士,都要输出此时司令部里共有多少个该种武士。
如果造出的是dragon,那么还要输出一行,例:
Ithasaarrow,andit'smoraleis23.34
表示该dragon降生时得到了arrow,其士气是23.34(为简单起见,本题中arrow前面的冠词用a,不用an,士气精确到小数点后面2位,四舍五入)
如果造出的是ninjia,那么还要输出一行,例:
Ithasabombandaarrow
表示该ninjia降生时得到了bomb和arrow。
如果造出的是iceman,那么还要输出一行,例:
Ithasasword
表示该iceman降生时得到了sword。
如果造出的是lion,那么还要输出一行,例:
It'sloyaltyis24
表示该lion降生时的忠诚度是24。
2)司令部停止制造武士
输出样例:
010redheadquarterstopsmakingwarriors
表示在10点整,红方司令部停止制造武士
输出事件时:
首先按时间顺序输出;
同一时间发生的事件,先输出红司令部的,再输出蓝司令部的。
输入
第一行是一个整数,代表测试数据组数。
每组测试数据共两行。
第一行,一个整数M。
其含义为:
每个司令部一开始都有M个生命元(1<=M<=10000)
第二行:
五个整数,依次是dragon、ninja、iceman、lion、wolf的初始生命值。
它们都大于0小于等于10000
输出
对每组测试数据,要求输出从0时0分开始,到双方司令部都停止制造武士为止的所有事件。
对每组测试数据,首先输出“Case:
n"n是测试数据的编号,从1开始
接下来按恰当的顺序和格式输出所有事件。
每个事件都以事件发生的时间开头,时间以小时为单位,有三位。
样例输入
1
20
34567
样例输出
Case:
1
000rediceman1bornwithstrength5,1icemaninredheadquarter
Ithasabomb
000bluelion1bornwithstrength6,1lioninblueheadquarter
It'sloyaltyis14
001redlion2bornwithstrength6,1lioninredheadquarter
It'sloyaltyis9
001bluedragon2bornwithstrength3,1dragoninblueheadquarter
Ithasaarrow,andit'smoraleis3.67
002redwolf3bornwithstrength7,1wolfinredheadquarter
002blueninja3bornwithstrength4,1ninjainblueheadquarter
Ithasaswordandabomb
003redheadquarterstopsmakingwarriors
003blueiceman4bornwithstrength5,1icemaninblueheadquarter
Ithasabomb
004blueheadquarterstopsmakingwarriors
#include
#include//int转string用的
#include
#include
usingnamespacestd;
intlifevalue[100][5];//存各组数据各个武士生命值的
intlifeofHeadquarter[100];//存放司令部的生命元
classWeapon{
public:
intnumber;
stringname;
intaggressivity;
Weapon(){}
Weapon(intag,stringnm,intnum){
aggressivity=ag;
number=num;
name=nm;
}
};
classSword:
publicWeapon
{
public:
Sword(){
name="sword";
number=0;
aggressivity=0;
}
Sword(intn):
Weapon(n,"sword",0){}
};
classBomb:
publicWeapon
{
public:
Bomb(){
name="bomb";
number=1;
aggressivity=0;
}
Bomb(intn):
Weapon(n,"bomb",1){}
};
classArrow:
publicWeapon
{
public:
Arrow(){
name="arrow";
number=2;
aggressivity=0;
}
Arrow(intn):
Weapon(n,"arrow",2){}
};
Weaponweapon_list[3];
classWarrior
{
public:
stringname;//名字
intnumber;//编号
intlife_value;//生命值
intaggressivity;//攻击力
staticintwarrior_number;
Warrior(){}
Warrior(stringn,intnum,intv,inta=0){
warrior_number++;//自增作为编号
name=n;
number=num;
life_value=v;
aggressivity=a;
}
};
intWarrior:
:
warrior_number=0;
classWarrior_dragon:
publicWarrior
{
public:
floatmorale;//士气
Weaponweapon1;
Warrior_dragon(stringn,intnum,intv,inta):
Warrior(n,num,v,a){}
Warrior_dragon(stringn,intnum,intv,inta,floatml):
Warrior(n,num,v,a){
morale=ml;
}
};
classWarrior_ninja:
publicWarrior
{
public:
Weaponweapon1;
Weaponweapon2;
Warrior_ninja(stringn,intnum,intv,inta):
Warrior(n,num,v,a){}
};
classWarrior_iceman:
publicWarrior
{
public:
Weaponweapon1;
Warrior_iceman(stringn,intnum,intv,inta):
Warrior(n,num,v,a){}
};
classWarrior_lion:
publicWarrior
{
public:
intloyalty;
Warrior_lion(stringn,intnum,intv,inta):
Warrior(n,num,v,a){
loyalty=0;
}
Warrior_lion(stringn,intnum,intv,inta,intly):
Warrior(n,num,v,a){
loyalty=ly;
}
};
classWarrior_wolf:
publicWarrior
{
public:
Warrior_wolf(stringn,intnum,intv,inta):
Warrior(n,num,v,a){}
};
classCity
{
public:
intnumber;//编号0即为红司令部,编号1000000则为蓝司令部
intlife_value;
listall_warriors;
City(){}
City(intn,intlv){
number=n;
life_value=lv;
}
};
classHeadquarters:
publicCity
{
public:
stringmake_order[5];
Headquarters(){}
Headquarters(intn,intlv):
City(n,lv){}//n为编号
intmake_warrior(inttime,intgroup);
};
stringInt_To_String(intn)
{
ostringstreamstream;
stream<returnstream.str();
}
intHeadquarters:
:
make_warrior(inttime,intgroup)
{
intflag=0;//标记司令部是否能制造该武士
stringstart=Int_To_String(time);//要输出的字符串
start.insert(0,3-start.length(),'0');//把数值变成004样的字符串
stringheadquarter_name;//司令部名字
if(number==0)headquarter_name="red";
elseif(number==1000000)headquarter_name="blue";
start.append(headquarter_name);
intindex=time%5;
for(inti=0;i<5;i++)
{
stringwarrior_type=make_order[index];
if(warrior_type=="dragon"&&life_value>=lifevalue[group][0])
{
flag=1;
life_value-=lifevalue[group][0];
Warrior_dragondragon("dragon",time+1,lifevalue[group][0],0);//实例化一武士(名,编号,生命,攻击力)
dragon.morale=(float)life_value/lifevalue[group][0];
dragon.weapon1=weapon_list[Warrior:
:
warrior_number%3];
all_warriors.push_back(dragon);//把武士放到武士总列表
intdragon_num=0;//记录总列表中总共多少此类型武士
list:
:
iteratorit;//遍历列表
for(it=all_warriors.begin();it!
=all_warriors.end();it++)
{
if((*it).name=="dragon")dragon_num++;
}
start.append("dragon");
start.append(Int_To_String(dragon.number));
start.append("bornwithstrength");
start.append(Int_To_String(lifevalue[group][0]));
start.append(",");
start.append(Int_To_String(dragon_num));
start.append("dragonin");
start.append(headquarter_name);
start.append("headquarter\n");
start.append("Ithasa");
start.append(dragon.weapon1.name);
start.append(",andit'smoraleis");
floatfl=((float)((int)((dragon.morale+0.005)*100)))/100;
stringstreamos;
os<stringsfl=os.str();
start.append(sfl);
start.append("\n");
cout<}
if(warrior_type=="ninja"&&life_value>=lifevalue[gr