zoukankan      html  css  js  c++  java
  • 18.03.23 魔兽世界之二:装备

    描述

    魔兽世界的西面是红魔军的司令部,东面是蓝魔军的司令部。两个司令部之间是依次排列的若干城市。 

    红司令部,City 1,City 2,……,City n,蓝司令部

    两军的司令部都会制造武士。武士一共有 dragon 、ninja、iceman、lion、wolf 五种。每种武士都有编号、生命值这两种属性。 
    有的武士可以拥有武器。武器有三种,sword, bomb,和arrow,编号分别为0,1,2。
    双方的武士编号都是从1开始计算。红方制造出来的第 n 个武士,编号就是n。同样,蓝方制造出来的第 n 个武士,编号也是n。 

    不同的武士有不同的特点。
    dragon 可以拥有一件武器。编号为n的dragon降生时即获得编号为 n%3 的武器。dragon还有“士气”这个属性,是个浮点数,其值为它降生后其司令部剩余生命元的数量除以造dragon所需的生命元数量。
    ninja可以拥有两件武器。编号为n的ninja降生时即获得编号为 n%3 和 (n+1)%3的武器。
    iceman有一件武器。编号为n的iceman降生时即获得编号为 n%3 的武器。
    lion 有“忠诚度”这个属性,其值等于它降生后其司令部剩余生命元的数目。
    wolf没特点。
    请注意,在以后的题目里,武士的士气,生命值,忠诚度在其生存期间都可能发生变化,都有作用,武士手中的武器随着使用攻击力也会发生变化。

    武士在刚降生的时候有一个生命值。 

    在每个整点,双方的司令部中各有一个武士降生。 

    红方司令部按照 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武士。(为简单起见,不考虑单词的复数形式)注意,每制造出一个新的武士,都要输出此时司令部里共有多少个该种武士。
    如果造出的是dragon,那么还要输出一行,例:
    It has a arrow,and it's morale is 23.34
    表示该dragon降生时得到了arrow,其士气是23.34(为简单起见,本题中arrow前面的冠词用a,不用an,士气精确到小数点后面2位,四舍五入)
    如果造出的是ninja,那么还要输出一行,例:
    It has a bomb and a arrow
    表示该ninja降生时得到了bomb和arrow。
    如果造出的是iceman,那么还要输出一行,例:
    It has a sword
    表示该iceman降生时得到了sword。
    如果造出的是lion,那么还要输出一行,例:
    It's loyalty is 24
    表示该lion降生时的忠诚度是24。
    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
    It has a bomb
    000 blue lion 1 born with strength 6,1 lion in blue headquarter
    It's loyalty is 14
    001 red lion 2 born with strength 6,1 lion in red headquarter
    It's loyalty is 9
    001 blue dragon 2 born with strength 3,1 dragon in blue headquarter
    It has a arrow,and it's morale is 3.67
    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
    It has a sword and a bomb
    003 red headquarter stops making warriors
    003 blue iceman 4 born with strength 5,1 iceman in blue headquarter
    It has a bomb
    004 blue headquarter stops making warriors
      1 #include <iostream>
      2 #include <cstdio>
      3 #include <algorithm>
      4 #include <stdlib.h>
      5 
      6 using namespace std;
      7 
      8 class warrior{
      9 public:
     10     int str;
     11     int totalnum_r;
     12     int totalnum_b;
     13     int id;
     14 };
     15 
     16 class dragon:public warrior
     17 {
     18 public:
     19     int weapon;//武器编号为id%3
     20     double morale;//士气为司令部剩余生命元数量/dragon生命值
     21 };
     22 class iceman:public warrior
     23 {
     24 public:
     25     int weapon1;//id%3
     26     int weapon2;//(id+1)%3
     27 };
     28 class ninja:public warrior
     29 {
     30 public:
     31     int weapon;//id%3
     32 };
     33 class wolf:public warrior{};
     34 class lion:public warrior
     35 {
     36 public:
     37     int loyalty;//司令部剩余生命元数量
     38 };
     39 class red
     40 {
     41 public:
     42     int warrior;
     43 };
     44 class blue
     45 {
     46 public:
     47     int warrior;
     48 };
     49 
     50 char weaptype[3][10]={"sword","bomb","arrow"};
     51 
     52 //red:i,l,w,n,d
     53 //blue:l,d,n,i,w
     54 //生命元根据生成武士的生命值减少
     55 //先红后蓝
     56 //weapon:sword bomb arrow--012
     57 int main()
     58 {
     59     int n;//case数
     60     cin >> n;
     61     for (int c = 1; c <= n; c++) {
     62         int M;//每个司令部的初始生命元数量
     63         int r_n, b_n, r_w = 1, b_w = 1;//红蓝双方的生命元数,红蓝双方要制造的武士类型
     64         dragon d;
     65         ninja n;
     66         iceman i;
     67         lion l;
     68         wolf w;
     69         red r;
     70         blue b;
     71         d.totalnum_r = 0, d.totalnum_b = 0;
     72         i.totalnum_r = 0, i.totalnum_b = 0;
     73         n.totalnum_r = 0, n.totalnum_b = 0;
     74         l.totalnum_r = 0, l.totalnum_b = 0;
     75         w.totalnum_r = 0, w.totalnum_b = 0;
     76         r.warrior = 0, b.warrior = 0;
     77         cin >> M >> d.str >> n.str >> i.str >> l.str >> w.str;
     78         int strmin = min(d.str, i.str);
     79         strmin = min(strmin, n.str);
     80         strmin = min(strmin, l.str);
     81         strmin = min(strmin, w.str);
     82         r_n = M, b_n = M;
     83         int t = 0;
     84         int flag_r = 1, flag_b = 1;//判断是否已停产的条件
     85         printf("Case:%d
    ", c);
     86         while (r_n >= strmin|| b_n >= strmin) {
     87             if (r_n < strmin&&flag_r)
     88             {
     89                 flag_r = 0;
     90                 printf("%03d red headquarter stops making warriors
    ", t);
     91             }
     92             int rcons = 0, bcons = 0;//红蓝双方这次要消耗的生命元数
     93             while (r_n >= strmin)
     94             {
     95                 switch (r_w)
     96                 {
     97                 case 1:rcons = i.str; break;
     98                 case 2:rcons = l.str; break;
     99                 case 3:rcons = w.str; break;
    100                 case 4:rcons = n.str; break;
    101                 case 5:rcons = d.str; break;
    102                 }
    103                 if (r_n < rcons) {
    104                     r_w++;
    105                     if (r_w > 5)
    106                         r_w -= 5;
    107                     continue;
    108                 }
    109                     r_n -= rcons;
    110                     printf("%03d red ", t);
    111                     switch (r_w)
    112                     {
    113                     case 1: {i.totalnum_r++; r.warrior++; printf("iceman %d born with strength %d,%d iceman", r.warrior, i.str, i.totalnum_r); break; }
    114                     case 2: {l.totalnum_r++; r.warrior++; printf("lion %d born with strength %d,%d lion", r.warrior, l.str, l.totalnum_r); break; }
    115                     case 3: {w.totalnum_r++; r.warrior ++; printf("wolf %d born with strength %d,%d wolf", r.warrior, w.str, w.totalnum_r); break; }
    116                     case 4: {n.totalnum_r++; r.warrior++; printf("ninja %d born with strength %d,%d ninja", r.warrior, n.str, n.totalnum_r); break; }
    117                     case 5: {d.totalnum_r++; r.warrior++; printf("dragon %d born with strength %d,%d dragon", r.warrior, d.str, d.totalnum_r); break; }
    118                     }
    119                     printf(" in red headquarter
    ");
    120                     switch (r_w)
    121                     {
    122                     case 1: { printf("It has a %s
    ", weaptype[r.warrior%3]); break; }
    123                     case 2: { printf("It's loyalty is %d
    ", r_n); break; }
    124                     case 3: break;
    125                     case 4: { printf("It has a %s and a %s
    ", weaptype[r.warrior%3],weaptype[(r.warrior+1)%3]); break; }
    126                     case 5: { printf("It has a %s,and it's morale is %.2lf
    ", weaptype[r.warrior%3],r_n*1.0/d.str); break; }
    127                     }
    128                     break;
    129             }
    130             if (b_n < strmin&&flag_b)
    131             {
    132                 flag_b = 0;
    133                 printf("%03d blue headquarter stops making warriors
    ", t);
    134             }
    135             while (b_n >= strmin)
    136             {
    137                 switch (b_w)
    138                 {
    139                 case 1:bcons = l.str; break;
    140                 case 2:bcons = d.str; break;
    141                 case 3:bcons = n.str; break;
    142                 case 4:bcons = i.str; break;
    143                 case 5:bcons = w.str; break;
    144                 }
    145                 if (b_n < bcons) {
    146                     b_w++;
    147                     if (b_w > 5)
    148                         b_w -= 5;
    149                     continue;
    150                 }
    151                     b_n -= bcons;
    152                     printf("%03d blue ", t);
    153                     switch (b_w)
    154                     {
    155                     case 1: {l.totalnum_b++; b.warrior++;  printf("lion %d born with strength %d,%d lion", b.warrior, l.str, l.totalnum_b); break; }
    156                     case 2: {d.totalnum_b++; b.warrior++; printf("dragon %d born with strength %d,%d dragon", b.warrior, d.str, d.totalnum_b); break; }
    157                     case 3: {n.totalnum_b++; b.warrior++; printf("ninja %d born with strength %d,%d ninja", b.warrior, n.str, n.totalnum_b); break; }
    158                     case 4: {i.totalnum_b++; b.warrior++; printf("iceman %d born with strength %d,%d iceman", b.warrior, i.str, i.totalnum_b); break; }
    159                     case 5: {w.totalnum_b++; b.warrior++; printf("wolf %d born with strength %d,%d wolf", b.warrior, w.str, w.totalnum_b); break; }
    160                     }
    161                     printf(" in blue headquarter
    ");
    162                     switch (b_w)
    163                     {
    164                     case 4: { printf("It has a %s
    ", weaptype[b.warrior%3]); break; }
    165                     case 1: { printf("It's loyalty is %d
    ", b_n); break; }
    166                     case 5: break;
    167                     case 3: { printf("It has a %s and a %s
    ", weaptype[b.warrior%3],weaptype[(b.warrior+1)%3]); break; }
    168                     case 2: { printf("It has a %s,and it's morale is %.2lf
    ", weaptype[b.warrior%3],b_n*1.0/d.str); break; }
    169                     }
    170                     break;
    171             }
    172             t++;
    173             r_w++,b_w++;
    174             if (r_w > 5)
    175                 r_w -= 5;
    176             if (b_w>5)
    177                 b_w -= 5;
    178         }
    179         if (flag_r)
    180             printf("%03d red headquarter stops making warriors
    ", t);
    181         if (flag_b)
    182             printf("%03d blue headquarter stops making warriors
    ", t);
    183     }
    184         return 0;
    185     }
    View Code

    有1的基础只需要很短的时间就能改好

    但这是建立在我忽略了“在以后的题目里,武士的士气,生命值,忠诚度在其生存期间都可能发生变化,都有作用,武士手中的武器随着使用攻击力也会发生变化”这句话的基础之上的

    不然也有意要为三打好基础去实现的(所以改动了class 但后来一个也没用上orz 就这么直接交上去了)

    但果然懒得弄……

    注定失败的战争,也要拼尽全力去打赢它; 就算输,也要输得足够漂亮。
  • 相关阅读:
    嵌入式成长轨迹36 【Zigbee项目】【单片机基础】【单片机SD卡】
    嵌入式成长轨迹31 【嵌入式学习阶段】【ARM环境调试】【UbuntuWin7 NAT联网】
    一个jQuery弹出层(tipsWindown)
    sql的left join 命令详解
    input javascript 之 onclick 大全
    php中调用用户自定义函数的方
    asp 正则表达式使用方法
    conn.execute的用法
    vbscript中的True和False
    JavaScript Cookie 的正确用法
  • 原文地址:https://www.cnblogs.com/yalphait/p/8631049.html
Copyright © 2011-2022 走看看