我是寫JAVA的 不過 作法應該差不多
這題會遇到的問題:
1.分數不是 橫的處理 ,而是直的
我是把所有分數丟入一個二維陣列 再由上到下掃過一遍
2.跑壘
搞一個 4格的陣列(3格也行 用4格只是讓我思考必較清晰@@ 4格Index 0不會用到) 分別代表 一壘(index1)二壘(index2)三壘(index3)
當打擊者 打出K壘打的時候 從後面開始掃 (從前面會有位子已有人站)
例: 現在 一壘 二壘都有人 這次要跑二壘 開始檢查:
三壘沒人 下一個 二壘有人 2(index) +2 超出 3(即三壘) 得分 反之沒超過 則變到下一個位置
以下以此類推
這題就這些需要想 其他都不算太難
Code:
package zerojudge.apcs;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Arrays;
public class c297 {
static int[] run = new int[4];
static int lose ;
static int b;
static int score;
public static void main(String[]args) throws Exception {
BufferedReader input = new BufferedReader(new InputStreamReader(System.in));
String line = input.readLine();
while (line!=null){
Arrays.fill(run, 0);
String[][] owo = new String[6][9];
lose=0;
score=0;
String[] o= line.split(" ");
for (int i =0;i<owo.length;i++){
owo[i][0]=o[i];
}
for (int i =1;i<9;i++){
String[] q = input.readLine().split(" ");
for (int g =0;g<q.length;g++){
owo[g][i] = q[g];
}
}
b = Integer.parseInt(input.readLine());
for (int i =1;i<owo.length;i++){
if (lose==b){
break;
}
for (int g=0;g<owo[0].length;g++){
if (lose!=b){
pp(owo[i][g]);
} else {
break;
}
}
}
System.out.println(score);
line= input.readLine();
}
}
public static void pp (String a){
switch(a){
case "FO": case "GO": case "SO":
lose++;
if (lose%3==0){
Arrays.fill(run,0);
}
break;
case "1B":
Run(1);
break;
case "2B":
Run(2);
break;
case "3B":
Run(3);
break;
case "HR":
Run(4);
break;
}
if (lose==b){
return;
}
}
public static void Run (int a){
for (int i =run.length-1;i>=0;i--){
if(run[i]==1){
if (i+a>3){
score++;
} else {
run[i+a]=1;
}
run[i]=0;
}
}
if (a!=4) {
run[a] = 1;
} else {
score++;
}
}
}