这道题考察类的应用,我试了试那些测试数据,输出应该都是对的,不知道为什么最后总是wrong answer。
有可能是因为我是输入一组之后立刻输出一组?而题意是输入全部数据后一并输出吗?
如果那个样子的话,我想,需要根据输入的组数n,new一个n*5的二维数组,和一个储存司令部生命值的一维数组,然后把数据都存进去,最后在循环中逐次使用。
不过实在不想再做了,最近军训没时间,而且感觉题意不太明确。
我的代码如下,c++刚开始练,有问题敬请大家指出
输出数据应该是对的
其中判断循环跳出的条件,我用的redexist=5,数列指针使用取余的方法循环,然后每次如果不行需要尝试下一个redexist就-1,直到0为止,证明已经试了一圈了。
总之这个过程还是收获了很多,对类的成员函数的使用更加熟练了。
另外一点就是private真麻烦啊,每次需要单独用函数调用
#include <iostream>
using namespace std;
class HQ//Headquarter
{
private:
char * name;
int lifesource;
int number=0;
public:
static int time;
HQ(char*name_):name(name_){};
void setlifesource(int lifesource_){
lifesource=lifesource_;
}
int getlifesource(){
return lifesource;
}
};
int HQ::time=0;
class Warrior
{
private:
char * type;
int id;
int life;
int Attack;
public:
Warrior(char*type_):type(type_){};
void setid(int id_){
id=id_;
};
void setlife(int life_){
life=life_;
}
int getlife(){
return life;
}
char * gettype(){
return type;
}
};
int main()
{
//part 1 定义与输入部分
HQ red("red");
HQ blue("blue");
int n;
cin>>n;
int k=0;
Warrior warriorlist[5]{Warrior("dragon"),Warrior("ninja"),Warrior("iceman"),Warrior("lion"),Warrior("wolf")};
for(k=0;k<n;k++){
HQ::time=0;
int rednum[5]={0,0,0,0,0};//红司令部每种武士当前数量,后面蓝司令部相同
int bluenum[5]={0,0,0,0,0};
int lifesource_;
cin>>lifesource_;
red.setlifesource(lifesource_);
blue.setlifesource(lifesource_);
for(int i=0;i<5;i++){
int life_;
cin>>life_;
warriorlist[i].setlife(life_);
}
int redorder[5]={2,3,4,1,0};//这是出兵顺序
int blueorder[5]={3,0,1,2,4};
//part2 输出部分
cout<<"Case:"<<k+1<<endl;
int redexist=5;
int blueexist=5;
int rp=0;//两个"指针",用于指向当前出兵顺序
int bp=0;
int redend=0;
int blueend=0;
int rn=1;
int bn=1;
while(redexist||blueexist){
while(redexist){
int rtlife=red.getlifesource();//rtlife即为redtemplife红司令部当前生命
int cwlife=warriorlist[redorder[rp]].getlife();
if((rtlife-cwlife)>=0){
rtlife-=cwlife;
rednum[redorder[rp]]++;
if(HQ::time<10){
cout<<"00"<<HQ::time<<" "<<"red "<<warriorlist[redorder[rp]].gettype()<<" "<<rn++<<" born with strength "<<warriorlist[redorder[rp]].getlife()<<","
<<rednum[redorder[rp]]<<" "<<warriorlist[redorder[rp]].gettype()<<" in red headquarter"<<endl;
}else{
cout<<"0"<<HQ::time<<" "<<"red "<<warriorlist[redorder[rp]].gettype()<<" "<<rn++<<" born with strength "<<warriorlist[redorder[rp]].getlife()<<","
<<rednum[redorder[rp]]<<" "<<warriorlist[redorder[rp]].gettype()<<" in red headquarter"<<endl;
}
rp=(rp+1)%5;
red.setlifesource(rtlife);
redexist=5;
break;
}else{
redexist-=1;
//cout<<"debug"<<endl;
rp=(rp+1)%5;
}
}
if((!redexist)&&(!redend)){
redend=1;
if(HQ::time<10){
cout<<"00"<<HQ::time<<" red headquarter stop making warriors"<<endl;
}else{
cout<<"0"<<HQ::time<<" red headquarter stop making warriors"<<endl;
}
}
while(blueexist){
int btlife=blue.getlifesource();
int cwlife=warriorlist[blueorder[bp]].getlife();
if((btlife-cwlife)>=0){
btlife-=cwlife;
bluenum[blueorder[bp]]++;
if(HQ::time<10){
cout<<"00"<<HQ::time<<" "<<"blue "<<warriorlist[blueorder[bp]].gettype()<<" "<<bn++<<" born with strength "<<warriorlist[blueorder[bp]].getlife()<<","
<<bluenum[blueorder[bp]]<<" "<<warriorlist[blueorder[bp]].gettype()<<" in blue headquarter"<<endl;
}else{
cout<<"0"<<HQ::time<<" "<<"blue "<<warriorlist[blueorder[bp]].gettype()<<" "<<bn++<<" born with strength "<<warriorlist[blueorder[bp]].getlife()<<","
<<bluenum[blueorder[bp]]<<" "<<warriorlist[blueorder[bp]].gettype()<<" in blue headquarter"<<endl;
}
bp=(bp+1)%5;
blue.setlifesource(btlife);
blueexist=5;
break;
}else{
blueexist-=1;
bp=(bp+1)%5;
}
}
if((!blueexist)&&(!blueend)){
blueend=1;
if(HQ::time<10){
cout<<"00"<<HQ::time<<" blue headquarter stop making warriors"<<endl;
}else{
cout<<"0"<<HQ::time<<" blue headquarter stop making warriors"<<endl;
}
}
HQ::time++;
}
}
//system("pause");
return 0;
}