C++程序求助,谢谢。wushoubei95@163.com,好人好人。

描述魔兽世界的西面是红魔军的司令部,东面是蓝魔军的司令部。两个司令部之间是依次排列的若干城市。红司令部,City1,City2,……,Cityn,蓝司令部两军的司令部都会... 描述
魔兽世界的西面是红魔军的司令部,东面是蓝魔军的司令部。两个司令部之间是依次排列的若干城市。
红司令部,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 <= 1000)。
第二行:五个整数,依次是 dragon 、ninja、iceman、lion、wolf 的初始生命值。它们都大于0小于等于100。
输出
对每组测试数据,要求输出从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
展开
 我来答
liruih8121099
游戏玩家

2014-03-12 · 游戏我都懂点儿,问我就对了
知道小有建树答主
回答量:561
采纳率:75%
帮助的人:173万
展开全部
#include<iostream>
#include <cstdio>

using namespace std;

char s[][10] = {"dragon","ninja","iceman","lion","wolf"};

int main()
{
int b[5],a[5],t,cs=0,c[5],f1,f2,o1[]={2,3,4,1,0},o2[]={3,0,1,2,4},m1,m2,k1,k2,sum1,sum2;
scanf("%d",&t);
while(t--)
{
f1 = f2 = 1;
scanf("%d",&m1);
m2 = m1;
for(int i=0;i<5;i++)
{
scanf("%d",c+i);
a[i] = b[i] = 0;
}
printf("Case:%d\n",++cs);
sum1 = sum2 = k1 = k2 = 0;
int ti = 0;
while(1)
{
if(!f1 && !f2)
break;
if(f1)
{
int temp = 0;
while(temp < 5)
if(m1>=c[ o1[(k1+temp)%5] ])
break;
else temp++;
if(temp == 5)
{
printf("%03d red headquarter stops making warriors\n",ti);
f1 = 0;
}
else
{
m1-= c[ o1[k1+temp] ];
k1 = (k1 + temp) % 5;
printf("%03d red %s %d born with strength %d,%d %s in red headquarter\n",
ti,s[o1[k1]],++sum1,c[o1[k1]],a[o1[k1]]+1,s[o1[k1]]);
a[o1[k1]]++;
k1 = (k1 + 1) % 5;
}
}
if(f2)
{
int temp = 0;
while(temp < 5)
if(m2>=c[ o2[(k2+temp)%5] ])
break;
else
temp++;
if(temp == 5)
{
printf("%03d blue headquarter stops making warriors\n",ti);
f2 = 0;
}
else
{
m2-= c[ o2[k2+temp] ];
k2 = (k2 + temp) % 5;
printf("%03d blue %s %d born with strength %d,%d %s in blue headquarter\n",
ti,s[o2[k2]],++sum2,c[o2[k2]],b[o2[k2]]+1,s[o2[k2]]);
b[o2[k2]]++;
k2 = (k2 + 1) % 5;
}
}
ti++;
}
}
return 0;
}
给分吧哥们~~
追问
7
20
3 4 5 6 7
40
3 14 5 6 7
30
40 50 60 70 80
100
10 20 30 40 50
400
20 3 300 60 98
1000
332 90 47 8989 83
5000
200 400 6 70 20
这个输入后成为ouput limit exceed
追答
while循环里面有个m1-= c[ o1[k1+temp] ];和m2-= c[ o2[k2+temp] ];,改成m1-= c[ o1[(k1+temp)%5] ];和m2-= c[ o2[(k2+temp)%5] ];
AiPPT
2024-09-19 广告
作为北京饼干科技有限公司的工作人员,关于AIPPT免费生成PPT的功能,我可以简要介绍如下:AIPPT是一款基于人工智能技术的PPT制作工具,它为用户提供了免费生成PPT的便捷服务。用户只需简单输入PPT的主题或内容大纲,AIPPT便能智能... 点击进入详情页
本回答由AiPPT提供
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式