A:魔兽世界之一:备战(模拟+水题)

A:魔兽世界之一:备战

总时间限制: 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

很水的一题,但是花了我很长查bug的时间,指出两点需要注意的,1:

制造一个初始生命值为m的武士,司令部中的生命元就要减少m个。 
如果司令部中的生命元不足以制造某个按顺序应该制造的武士,那么司令部就试图制造下一个。如果所有武士都不能制造了,则司令部停止制造武士。

这里感觉题目没说清楚,当当前的不能制作了,我们尝试做下一个,如果当前的后面的都做不了这个时候回到第一个再往后面找找到当前为止。
2:

if(isover)return;

直接上代码了:
#include<bits/stdc++.h>
#include<stdio.h>
using namespace std;

int t,m;
int num=0; 
 class redwarrior

{
	public:
	   	static string red[10];
		int book[10];//标记数组,red[i]对应的生命值;
		int n[10];//标记数组,red[i]对应的数量	
};
string redwarrior::red[10]={"iceman","lion","wolf","ninja","dragon"};
class bluewarrior
{
	public:
	   	static string blue[10];
		int book[10];
		int n[10];//标记数组,red[i]对应的数量	
};
string bluewarrior::blue[10]={"lion","dragon","ninja","iceman","wolf"};
class blueteam:public bluewarrior 
{
	private:
		int HP;//生命元
	int minn;
	public:	
    int isover;
int bluec;
	void getHP(int a){
		HP=a;
	}	
	int reHP(){
		return HP;
	}
	void deninition(int a,int b,int c,int d,int e)
	{
	bluec=0;
	isover=0;
		book[1]=a;book[2]=b;book[3]=c;book[0]=d;book[4]=e;
	minn=book[0];
	for(int i=1;i<=4;i++)
		if(book[i]<minn)
			minn=book[i];
	}
    void mem()
    {
         memset(n,0,sizeof(n)); 
    } 
	void blueprint()
	{
	if(isover)return;
            if(HP<minn){
        isover = 1;
        printf("%03d",num);
        cout <<" blue"<<" headquarter stops making warriors\n";
        return;
         }
	for(;;){
		int i=bluec;
	if(i>4)
	{
		i%=5;
	}
		if(HP<book[i])
	{
		++bluec;
		continue;
	}
		else 
		{
					printf("%03d",num);
					n[i]++;
					cout<<" blue "<<blue[i]<<" "<<num+1<<" born with strength "<<book[i]<<","<<n[i]<<" "<<blue[i]<<" in blue"<<" headquarter"<<endl;
					HP-=book[i];
				++bluec;
                                    break;
		}
		}
           
	}
};
class redteam:public redwarrior 
{
	private:
		int HP;//生命元 
            
            int minn;    
	public:
    int isover;
    int redc;
	void getHP(int a){
		HP=a;
	}	
	int reHP(){
		return HP;
	}
    void mem()
    {
         memset(n,0,sizeof(n)); 
    } 
	void deninition(int a,int b,int c,int d,int e)
	{
            redc=0;
            isover=0;
		book[4]=a;book[3]=b;book[0]=c;book[1]=d;book[2]=e;
            minn=book[0];
	for(int i=1;i<=4;i++)
		if(book[i]<minn)
			minn=book[i];   
	}
	void redprint()
	{       if(isover)return;
            if(HP<minn){
        isover = 1;
        printf("%03d",num);
        cout <<" red"<<" headquarter stops making warriors\n";
        return;
         } 
		for(;;){
		int i=redc;
	if(i>4)
	{
		i%=5;
	}
		if(HP<book[i])
	{
		++redc;
		continue;
	}
		else 
		{
					printf("%03d",num);
					n[i]++;
					cout<<" red "<<red[i]<<" "<<num+1<<" born with strength "<<book[i]<<","<<n[i]<<" "<<red[i]<<" in red"<<" headquarter"<<endl;
					HP-=book[i];
				++redc;
                                    break;
		}
		}
            
	}
} ;
redteam red;
blueteam blue;
int main()
{
	cin>>t;
	for(int i=1;i<=t;i++)
	{
            num=0;
		cin>>m;
		red.getHP(m);
		blue.getHP(m);
            red.mem();
            blue.mem(); 
		int a,b,c,d,e;
		cin>>a>>b>>c>>d>>e;
		red.deninition(a,b,c,d,e);
		blue.deninition(a,b,c,d,e);
		cout<<"Case:"<<i<<endl;
		for(;;)
		{
               if(red.isover&&blue.isover)break; 
		    red.redprint();
		    blue.blueprint();
                num++;
		}
	}
}
全部评论

相关推荐

06-27 12:54
已编辑
门头沟学院 Java
累了,讲讲我的大学经历吧,目前在家待业。我是一个二本院校软件工程专业。最开始选专业是觉得计算机感兴趣,所以选择了他。本人学习计算机是从大二暑假结束开始的,也就是大三开始。当时每天学习,我个人认为Java以及是我生活的一部分了,就这样持续学习了一年半,来到了大四上学期末,大概是在12月中旬,我终于找的到了一家上海中厂的实习,但我发现实习生的工作很枯燥,公司分配的活也不多,大多时间也是自己在自学。就这样我秋招末才找到实习。时间来到了3月中旬,公司说我可以转正,但是转正工资只有7000,不过很稳定,不加班,双休,因为要回学校参加答辩了,同时当时也是心高气傲,认为可以找到更好的,所以放弃了转正机会,回学校准备论文。准备论文期间就也没有投递简历。然后时间来到了5月中旬,这时春招基本也结束了,然后我开始投递简历,期间只是约到了几家下场面试。工资也只有6-7k,到现在我不知道该怎么办了。已经没有当初学习的心劲了,好累呀,但是又不知道该干什么去。在家就是打游戏,boss简历投一投。每天日重一次。26秋招都说是针对26届的人,25怎么办。我好绝望。要不要参加考公、考研、央国企这些的。有没有大佬可以帮帮我。为什么感觉别人找工作都是顺其自然的事情,我感觉自己每一步都在艰难追赶。八股文背了又忘背了又忘,我每次都花很长时间去理解他,可是现在感觉八股、项目都忘完了。真的已经没有力气再去学习了。图片是我的简历,有没有大哥可以指正一下,或者说我应该走哪条路,有点不想在找工作了。
码客明:太累了就休息一下兄弟,人生不会完蛋的
如果实习可以转正,你会不...
点赞 评论 收藏
分享
07-07 12:25
门头沟学院 Java
程序员牛肉:你这个智邮公司做的就是那个乐山市税务系统的服务吗?
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务