# 實作題 - 棒球遊戲 - APCS - by Peter Wang
## 題目資訊
此題為2016.10.19測驗中的題目4
###### tags: `APCS`
## 題目敘述
程式讀入隊中每位球員的打擊結果,然後計算出球隊得分。
這是個簡化版的模擬,假設擊球員打擊結果只有以下情況:
(1) 安打:以1B,2B,3B和HR 分別代表一壘打、二壘打、三壘打和全(四)壘打。
(2) 出局:以 FO,GO和 SO表示。
這個簡化版的規則如下:
(1) 球場上有四個壘包,稱為本壘、一壘、二壘、和三壘、。
(2) 站在本壘握著球棒打球的稱為「擊球員」,站在另外三個壘包的稱為「跑壘員」。
(3) 當擊球員的打擊結果為「安打」時,場上球員(擊球員與跑壘員)可以移動;結果為 「出局」時,跑壘員不動,擊球員離場換下一位擊球員。
(4) 球隊總共有九位球員,依序排列 。比賽開始由第1位開始打擊,當第 i 位球員打擊完畢後,由第 (i+1)位球員擔任擊球員。當第九位球員完畢後,則輪回第一位球員。
(5) 當打出 K 壘打時,場上球員(擊球員和跑壘員)會前進 K 個壘包。從本壘前進一個壘包會移動到一壘,接著是二壘、三壘,最後回到本壘。
(6) 每位球員回到本壘時可得 1分
(7) 每達到三個出局數時,一、二和三壘就會清空( 跑壘員都得離開) ,重新開始。
請寫出具備這樣功能的程式,計算球隊總得分。
### 輸入:
每組測試資料固定有十行。
第一到九行,依照球員順序,每一行代表位球員的打擊資訊。每一行開始有一個正整數 a (1≤a≤5),代表球員總共打了 a 次。接下來有 a 個字串(均為兩個字元),依序代表每次打擊的結果。 資料之間均以一個空白字元隔開。球員的打擊資訊不會有錯誤也不會缺漏。
第十行有一個正整數 b (1≤b≤27) ,表示我們想要計算當總出局數累計到 b 時, 該球隊的得分。輸入的打擊資訊中至少包含b個出局。
### 輸出:
計算在總計第b個出局數發生時的總得分,並將此得分輸出於一行。
## 解題思路
把分數、出局數、壘包數......,都分別用變數記住,並且實際模擬實作就能得到答案。
## 程式碼
```clike=
#include <iostream>
using namespace std;
string player[9][5];
int point=0;
int out=0;
int count=0;
int p=0;
int r=0;
bool base[3];
int main() {
for(int i=0;i<9;i++){
int n;
cin>>n;
for(int j=0;j<n;j++){
cin>>player[i][j];
}
}
int n;
cin>>n;
out=n;
fill(base,base+3,false);
while(count!=out){
if(player[p][r]=="FO" || player[p][r]=="GO" || player[p][r]=="SO"){
count++;
if(count%3==0){
fill(base,base+3,false);
}
}
else if(player[p][r]=="1B"){
if(base[2]==true) point++,base[2]=false;
if(base[1]==true) base[2]=true,base[1]=false;
if(base[0]==true) base[1]=true,base[0]=false;
base[0]=true;
}
else if(player[p][r]=="2B"){
if(base[2]==true) point++,base[2]=false;
if(base[1]==true) point++,base[1]=false;
if(base[0]==true) base[2]=true,base[0]=false;
base[1]=true;
}
else if(player[p][r]=="3B"){
if(base[2]==true) point++,base[2]=false;
if(base[1]==true) point++,base[1]=false;
if(base[0]==true) point++,base[0]=false;
base[2]=true;
}
else if(player[p][r]=="HR"){
if(base[2]==true) point++,base[2]=false;
if(base[1]==true) point++,base[1]=false;
if(base[0]==true) point++,base[0]=false;
point++;
}
if(p==8) p=0,r++;
else{
p++;
}
}
cout<<point<<endl;
return 0;
}
```
## 資料來源
[zerojudge](https://zerojudge.tw/)
[題目敘述](https://zerojudge.tw/ShowProblem?problemid=c297)
[原題PDF檔](https://docs.google.com/viewer?a=v&pid=sites&srcid=ZGVmYXVsdGRvbWFpbnx6c2dpdGl0aXR8Z3g6NTRkNzUxYTBkMmNjYTZmOA)
## 備註
>[name=PeterWang]
>[time=Sat, Aug 7, 2021 3:50 PM]