mooc 魔兽世界1 备战 的代码(可能输出要求和题意不符)

这道题考察类的应用,我试了试那些测试数据,输出应该都是对的,不知道为什么最后总是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;
}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值