CCFCSP 201609 3 爐石傳說

2021-07-29 20:09:00 字數 1724 閱讀 7970

試題編號: 201609-3

試題名稱: 爐石傳說

時間限制: 1.0s

記憶體限制: 256.0mb

場上的兩名玩家輪流進行遊戲,每個玩家場上最多有7個隨從,而場上的隨從總是從左到右排列,即在場上不會有空位。

玩家擁有兩種操作:召喚(summon)和攻擊(attack)。由題意可知,隨從的召喚位置在當前場上所有隨從最左邊和最右邊(1到m+1,m代表場上隨從數量)之間,即召喚不會使得新的隨從和原有隨從之間產生空位。如果召喚隨從的目標位置已經存在隨從,那麼改隨從和它右邊的隨從都會向右移動一位(題目規定當場上存在7個隨從時一定不會發生召喚)。當乙個隨從進行攻擊時,攻擊方和被攻擊方的生命值都會減去對方的攻擊力,當隨從生命值小於等於零就會死亡,此時這個隨從右邊的所有隨從都會向左移動一位,使得隨從之間沒有空位。

我們可以看到隨從總是向左填補空位,只有有新的隨從加入時,才會有隨從向右移動。因此,可以想到用陣列模擬隨從的行為,隨從的移動就轉化為了陣列元素的調整。為了使得**更加清晰,下文中的**用結構體表示隨從和玩家,玩家的結構體中的隨從陣列用來表示該玩家場上的隨從,為了方便起見,下標為0的隨從用來記錄玩家自己的資訊,(因為題目中attack目標值為0時隨從攻擊對方玩家),同時,在結構體重加入了表示玩家行為(召喚和攻擊)的函式。模擬每輪遊戲的進**況,每一回合結束後判斷是否有隨從死亡,如果有,就對玩家結構體內隨從的佇列進行調整,但是如果是玩家(下標為0的隨從)死亡,就不需要進行調整了,否則會影響戰果的判斷。

輸出結果時,只需要輸出結構體中相應元素的值。

#include

#include

#include

#include

#include

#include

#include

using

namespace

std;

//記錄隨從的資訊

struct servent

};//記錄玩家的資訊

struct player

//召喚隨從

void summon(int pos,int at,int heal)

servent[pos].health = heal;

servent[pos].atk = at;

serventnum++;

}//隨從攻擊

void serventattack(int a, int b,player &another)

if (b != 0 && another.servent[b].health <= 0)

}//輸出場上情況

void printstage()

cout

<< endl;

}}player[2];

int main()

else

if (s[0] == 's')

else

}if (player[0].servent[0].health <= 0) cout

<< -1

<< endl;

else

if (player[1].servent[0].health <= 0) cout

<< 1

<< endl;

else

cout

<< 0

<< endl;

player[0].printstage();

player[1].printstage();

}

CCF CSP201609 3爐石傳說

試題編號 201609 3 試題名稱 爐石傳說 時間限制 1.0s 記憶體限制 256.0mb 問題描述 爐石傳說 魔獸英雄傳 hearthstone heroes of warcraft,簡稱爐石傳說 是暴雪娛樂開發的一款集換式卡牌遊戲 如下圖所示 遊戲在乙個戰鬥棋盤上進行,由兩名玩家輪流進行操作...

CCF CSP 201609 3 爐石傳說

一道簡單的模擬,使用乙個變數cur來記錄當前的玩家,用乙個結構體陣列來記錄當前場上的隨從,之後按照題目要求進行隨從召喚後的右移和隨從死亡後的左移即可。include include using namespace std struct servent s 2 8 int cnt 2 int n,cu...

CCF CSP 201609 3 爐石傳說

題目連線 問題描述 爐石傳說 魔獸英雄傳 hearthstone heroes of warcraft,簡稱爐石傳說 是暴雪娛樂開發的一款集換式卡牌遊戲 如下圖所示 遊戲在乙個戰鬥棋盤上進行,由兩名玩家輪流進行操作,本題所使用的爐石傳說遊戲的簡化規則如下 玩家會控制一些角色,每個角色有自己的生命值和...