MOOC程式設計題 2 魔獸世界之二 裝備

2021-10-04 04:57:48 字數 4882 閱讀 8171

描述

魔獸世界的西面是紅魔軍的司令部,東面是藍魔軍的司令部。兩個司令部之間是依次排列的若干城市。

紅司令部,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所需的生命元數量。

ninjia可以擁有兩件**。編號為n的ninjia降生時即獲得編號為 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分開始到雙方司令部停止製造武士為止的所有事件按順序輸出。

一共有兩種事件,其對應的輸出樣例如下:

武士降生

輸出樣例: 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位,四捨五入)

如果造出的是ninjia,那麼還要輸出一行,例:

it has a bomb and a arrow

表示該ninjia降生時得到了bomb和arrow。

如果造出的是iceman,那麼還要輸出一行,例:

it has a sword

表示該iceman降生時得到了sword。

如果造出的是lion,那麼還要輸出一行,例:

it』s loyalty is 24

表示該lion降生時的忠誠度是24。

司令部停止製造武士

輸出樣例: 010 red headquarter stops ****** warriors

表示在 10點整,紅方司令部停止製造武士

輸出事件時:

首先按時間順序輸出;

同一時間發生的事件,先輸出紅司令部的,再輸出藍司令部的。

輸入第一行是乙個整數,代表測試資料組數。

每組測試資料共兩行。

第一行,乙個整數m。其含義為: 每個司令部一開始都有m個生命元( 1 <= m <= 10000)

第二行:五個整數,依次是 dragon 、ninja、iceman、lion、wolf 的初始生命值。它們都大於0小於等於10000

輸出對每組測試資料,要求輸出從0時0分開始,到雙方司令部都停止製造武士為止的所有事件。

對每組測試資料,首先輸出「case:n" n是測試資料的編號,從1開始

接下來按恰當的順序和格式輸出所有事件。每個事件都以事件發生的時間開頭,時間以小時為單位,有三位。

樣例輸入120

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 ****** warriors

003 blue iceman 4 born with strength 5,1 iceman in blue headquarter

it has a bomb

004 blue headquarter stops ****** warriors

#include

#include

#include

#include

using

namespace std;

class

wushi

wushi

(int id=0,

int life=0)

:id(id)

,life

(life)};

string wushi::wuqi_name=

;class

dragon

:public wushi

void

show()

};class

ninja

:public wushi

void

show()

};class

iceman

:public wushi

void

show()

};class

lion

:public wushi

void

show()

};class

wolf

:public wushi

void

show()

};class

head

head

(int m_m,

bool m_isred,

int c0,

int c1,

int c2,

int c3,

int c4):m

(m_m)

,isred

(m_isred)

,cnt(0

),now(0)

bool

made()

; wushi*

new_wushi

(int id);}

;int head::cast[5]

;string head::swushi[5]

=;void head::

init()

wushi* head::

new_wushi

(int id)

}bool head::

made()

}int id = pos[now%5]

;//cout << now << " " << id << "\n";

ct[id]++;

m -= cast[id]

; cout <<

setfill

('0'

)<<

setw(3

)<< cnt-

1<<

(isred?

" red "

:" blue "

)\ << swushi[id]

<<

" "<< cnt <<

" born with strength "

<< cast[id]

<<

","\

<< ct[id]

<<

" "<< swushi[id]

<<

" in "

<<

(isred?

"red"

:"blue"

)<<

" headquarter\n"

; wushi *myws =

new_wushi

(id);(

*myws)

.show()

; now++;}

intmain()

return0;

}

北大程式設計實習公開課程式設計作業,魔獸世界之二 裝備

魔獸世界的第二個版本,裝備。相較於版本一,武士已經不能直接用兩個全域性資料儲存名稱和初始生命值就可以搞定了。這裡先分析一下題目。武士有5個種類,每種都有自己的特徵,但他們共有的特徵是有名字和生命元這兩個屬性。所以把這兩個共有屬性抽象出來作為乙個基類warrior。5種武士分別從這個基類派生。邏輯上,...

北大MOOC第五周003 魔獸世界之二 裝備

乙個乙個結果對比了,發現結果都對啊,但是沒有通過。其實很簡單,就是在原來魔獸世界一的基礎上多加了乙個 的功能,然而自己還是搞了乙個小時,兩周前寫的程式都忘完了,發現自己當時寫的程式注釋不夠詳細,所以才會導致程式中的變數好多都忘了。吸取教訓,要注釋的詳細一點,你的遺忘速度真的很快!原題位址 inclu...

MOOC清華《程式設計基礎》第1章第2題 求周長

題目描述 mooc清華 程式設計基礎 第1章第2題 求周長,已知乙個圓的半徑是2,請編寫程式計算輸出它的周長。要求計算中以3.14159作為圓周率的值。保留小數點後5位 輸入描述 無輸出描述 輸出圓形周長 附加說明 保留小數點的功能需要包含iomanip標頭檔案,並在輸出數字前加上 例如 cout ...