試題編號: 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,簡稱爐石傳說 是暴雪娛樂開發的一款集換式卡牌遊戲 如下圖所示 遊戲在乙個戰鬥棋盤上進行,由兩名玩家輪流進行操作,本題所使用的爐石傳說遊戲的簡化規則如下 玩家會控制一些角色,每個角色有自己的生命值和...