C++面向对象程序设计 013:魔兽世界之一:备战 ---- (北大Mooc)


专题博客链接

北大C++ POJ课后习题博客全解记录


原题题目

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

代码实现

#include <iostream>
#include <string>
#include <string.h>
#include <iomanip>
using namespace std;

class RedTeam
{
private:
    int producelife,dragonlife,ninjalife,icemanlife,lionlife,wolflife;
    int numbers[5],producechoose;
    int time,totalnum;
    int lifes[5];
    string name[5];
    string bornout,teamout;
public:
    int Rflag;
    RedTeam(int life,int dragon,int ninja,int iceman,int lion,int wolf)
    {
        producelife = life,dragonlife = dragon,ninjalife = ninja,icemanlife = iceman,lionlife = lion,wolflife = wolf;
        lifes[0] = icemanlife,lifes[1] = lionlife,lifes[2] = wolflife,lifes[3] = ninjalife,lifes[4] = dragonlife;
        name[0] = "iceman",name[1] = "lion",name[2] = "wolf",name[3] = "ninja",name[4] = "dragon";
        producechoose = totalnum = Rflag = time = 0;
        memset(numbers,0,sizeof(numbers));
        bornout = " born with strength ",teamout = " in red headquarter";

    }
    void ProducePrint()
    {
        int i,flag = 0;
        for(i=0;i<5;i++)
        {
            if(producelife >= lifes[producechoose])
            {
                producelife -= lifes[producechoose];
                numbers[producechoose]++;
                totalnum++;
                cout<<setw(3)<<setfill('0')<<time<<" red ";
                cout<<name[producechoose]<<' '<<totalnum<<bornout<<lifes[producechoose]<<',';
                cout<<numbers[producechoose]<<' '<<name[producechoose]<<teamout<<endl;
                flag = 1;
            }
            producechoose++;
            if(producechoose == 5)  producechoose = 0;
            if(flag)break;
        }
        if(flag)
            time++;
        if(!flag){
            Rflag = 1;
            cout<<setw(3)<<setfill('0')<<time<<' '<<"red headquarter stops making warriors"<<endl;
                }
    }
};

class BlueTeam{
private:
    int producelife,dragonlife,ninjalife,icemanlife,lionlife,wolflife;
    int numbers[5],producechoose;
    int time,totalnum;
    int lifes[5];
    string name[5];
    string bornout,teamout;
public:
    int Bflag;
    BlueTeam(int life,int dragon,int ninja,int iceman,int lion,int wolf)
    {
        producelife = life,dragonlife = dragon,ninjalife = ninja,icemanlife = iceman,lionlife = lion,wolflife = wolf;
        totalnum = producechoose = Bflag = time = 0;
        name[0] = "lion",name[1] = "dragon",name[2] = "ninja",name[3] = "iceman",name[4] = "wolf";
        memset(numbers,0,sizeof(numbers));
        lifes[0] = lionlife,lifes[1] = dragonlife,lifes[2] = ninjalife,lifes[3] = icemanlife,lifes[4] = wolflife;
        bornout = "born with strength ",teamout = " in blue headquarter";
    }
    void ProducePrint()
    {
        int i,flag = 0;
        for(i=0;i<5;i++)
        {
            if(producelife >= lifes[producechoose])
            {
                producelife -= lifes[producechoose];
                numbers[producechoose]++;
                totalnum++;
                cout<<setw(3)<<setfill('0')<<time<<" blue "<<name[producechoose]<<' '<<totalnum<<' '<<bornout<<lifes[producechoose]<<',';
                cout<<numbers[producechoose]<<' '<<name[producechoose]<<teamout<<endl;
                flag = 1;
            }
            producechoose++;
            if(producechoose == 5)  producechoose = 0;
            if(flag == 1)break;
        }
        if(flag)
            time++;
        if(!flag){
            Bflag = 1;
            cout<<setw(3)<<setfill('0')<<time<<" blue headquarter stops making warriors"<<endl;
        }
    }
};

int main()
{
    int testtimes,producelife,dragonlife,ninjalife,icemanlife,lionlife,wolflife,i;
    cin>>testtimes;
    for(i=1;i<=testtimes;i++)
    {
        cin>>producelife;
        cin>>dragonlife>>ninjalife>>icemanlife>>lionlife>>wolflife;
        RedTeam R(producelife,dragonlife,ninjalife,icemanlife,lionlife,wolflife);
        BlueTeam B(producelife,dragonlife,ninjalife,icemanlife,lionlife,wolflife);
        cout<<"Case:"<<i<<endl;
        while(!R.Rflag || !B.Bflag)
        {
            if(!R.Rflag)R.ProducePrint();
            if(!B.Bflag)B.ProducePrint();
        }
    }
    return 0;
}
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Love 6

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值