题目如下:
保龄球是在木板道上滚球击瓶的一种室内运动。保龄球比赛以局为单位,每局以击倒球瓶数的多少来计分并决定胜负。1局分为10轮,每轮有两次投球的机会。计分时,每轮对应一个计分格。若第1次投球就击倒全部球瓶,那该轮的记分格就记strike (全中),并结束该轮;若第1次没有全中,则可以再投第二次,如果把剩下的球瓶都击倒就记spare (补中)。每轮的计分规则如下:
1.失球
无论何种情况,在一轮的两次投球后, 未能击倒10个瓶,此轮的得分为两次击倒的瓶数之和。投球击中几瓶就用数字几表示;投球未击中用符号[-]表示。
2.补中
补中的那次投球用符号[/]表示。补中那轮的得分是10分+ (奖励的)下一次投球击倒的瓶数。
3.全中
全中的那次投球用符号[x] 表示。全中那轮的得分是10分+ (奖励的)下两次投球击倒的瓶数。
第10轮的情况比较特殊。若在第10轮投出补中可再额外投球一次,该次击中的瓶数用于第10轮的奖励,此次投球本身则不再累加计分。若在第10轮投出全中可再额外投球两次,两次击中的瓶数用于第10轮的奖励,投球本身同样不再累加计分。换言之,第十轮最多可投球三次。例如:
现在给出每-局击倒的球瓶数,请计算该局的得分。
输入格式:
每行为一局,依次列出该局的击中瓶数,其中x表示strike, /表示spare, 数字1-9表示其他情况击中的瓶数,- 表示投球未击中。每个输入都是合法且完整的。
输出格式:该局的得分。
输入样例:
XXXXXXXXXXXX
9/9/9/9/9/9/9/9/9/9/9
12345432123454321234
--------------------
输出样例:
300
190
58
0
相关代码:
import java.util.Scanner;
public class Interview {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String index = scanner.nextLine();
char[] chars = index.toCharArray();
int i = 0;
int j = 0;
int k = 0;
int score = 0;
char strike = 'X';
char spare = '/';
char out = '-';
while(j < 10) {
if (strike == chars[i]) {
score += 10;
if (strike == chars[i + 1])
score += 10;
else
score += Integer.parseInt(chars[i + 1] + "");
if (strike == chars[i + 2])
score += 10;
else if (spare == chars[i + 2])
score += 10 - Integer.parseInt(chars[i + 1] + "");
else
score += Integer.parseInt(chars[i + 2] + "");
++i;
++j;
} else if (spare == chars[i]) {
score += 10 - Integer.parseInt(chars[i - 1] + "");
if (strike == chars[i + 1])
score += 10;
else
score += Integer.parseInt(chars[i + 1] + "");
++i;
++j;
k = 0;
} else if (out == chars[i]) {
score += 0;
++i;
++k;
if (k == 2) {
k = 0;
++j;
}
} else {
score += Integer.parseInt(chars[i] + "");
++i;
++k;
if (k == 2) {
k = 0;
++j;
}
}
}
System.out.println(score);
}
}
输出结果如下:
input:X7/368-XX8/637/9/X
out: 162
input:X72X9/7-9/XX9/9-
out: 169