保龄球 java机试题

题目如下:

保龄球是在木板道上滚球击瓶的一种室内运动。保龄球比赛以局为单位,每局以击倒球瓶数的多少来计分并决定胜负。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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

柳落青

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值