程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 魔獸世界之一:備戰,魔獸世界備戰

魔獸世界之一:備戰,魔獸世界備戰

編輯:C++入門知識

魔獸世界之一:備戰,魔獸世界備戰


來源: POJ 

注意: 總時間限制: 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 2 3       1 20 3 4 5 6 7    

 

樣例輸出

1 2 3 4 5 6 7 8 9 10       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      
//兩軍司令部都會制造武士有 dragon ninja iceman lion wolf 五種 每種武士都有編號(number),生命值(health) ,攻擊力(attack)三種屬性 
//紅方司令部按照 iceman lion wolf ninja gradon的順序制造武士
//藍方司令部按照 lion gradon ninja iceman wolf的順序制造武士
//每制造一個生命值為M的武士司令部的生命值就要減少m
#include <iostream>
#include <string>
#include <iomanip> 
using namespace std;
class hero{
public: 
    void set_health(){
        int h;
        cin>>h;
        health=h;
    }
    int print_health(){
        return health;
    } 
private:
     int number;
    int health;
    int attack;    
 } dragon,ninja,iceman,lion,wolf;
 int main()
 {
     int s;//測試組數
    cin>>s;
    for(int i=0;i<s;i++){
        int counter=1;//計數器 計算英雄生成的周期 
        int R,B;//紅藍司令部的生命值
        int r[5],b[5];//儲存五種對象分別的生命值 
        int time=0;//創建時間
        int number=1;
        string s_r[5]={"iceman","lion","wolf","ninja","dragon"};//將對象名用字符串表示 
        string s_b[5]={"lion","dragon","ninja","iceman","wolf"};
        cin>>R;//輸入生命值 
        B=R;// 紅藍司令部的生命值相等 
          dragon.set_health();    b[1]=r[4]=dragon.print_health();
          ninja.set_health();        b[2]=r[3]=ninja.print_health();
        iceman.set_health();    b[3]=r[0]=iceman.print_health();  
        lion.set_health();      b[0]=r[1]=lion.print_health();  
        wolf.set_health();        b[4]=r[2]=wolf.print_health(); 
        cout<<"case:"<<i+1<<endl;
        //依次輸入 dragon ninja iceman lion wolf的生命值
        int first_r=1,first_b=1;//設置計數器,控制紅方/藍方最後一行只輸出一次終止信息 
        for(int i=0;  ;i++,time++,number++){//循環輸出創建英雄的信息

            R-=r[i];
            if(R>=0){
                cout<<setfill('0')<<setw(3)<<time<<" "<<"red"<<" "<<s_r[i]<<" "<<number<<" born with strength "<<r[i]<<","<<counter<<" "<<s_r[i]<<" in red headquarter"<<endl;            
            }
            else{
                if(first_r){
                    cout<<setfill('0')<<setw(3)<<time<<" red headquarter stops making warriors"<<endl;
                    first_r=0; 
                }
            }
            B-=b[i];    
            if(B>=0){
                 cout<<setfill('0')<<setw(3)<<time<<" "<<"blue"<<" "<<s_b[i]<<" "<<number<<" born with strength "<<b[i]<<","<<counter<<" "<<s_b[i]<<" in blue headquarter"<<endl;
            }
            else{
                if(first_b){
                    cout<<setfill('0')<<setw(3)<<time<<" bule headquarter stops making warriors"<<endl;
                    first_b=0;
                }
            }    
            if(i==4){
                i=-1;
                counter++;
            }     
            if(first_r==0&&first_b==0){
                break;    
            } 
        }
    }
     return 0;
 }
  

 

                     

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved