OD 投篮大赛

文章讲述了如何通过Java代码实现一个方法,根据给定的操作字符串数组计算投篮大赛的得分总和,涉及栈和特定得分规则的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

/**
 * 题目描述
 * 你现在是一场采用特殊赛制投篮大赛的记录员。这场比赛由若干回合组成,过去几回合的得分可能会影响以后几回合的得分。
 * 比赛开始时,记录时空白的。你会得到一个记录操作的字符串列表aops,其中ops[i]是你需要记录的第i项操作,ops遵循下述规则:
 * 整数x-表示本回合新获得分数x
 * “+”-表示本回合新获得的得分是前两次得分的总和
 * “D”-表示本回合新获得的得分是前一次得分的两倍
 * “C"-表示本回合没有分数,并且前一次得分无效,将其从记录中移除。
 * 请你返回记录中所有得分的总和。
 * 输入描述
 * 输入为一个字符串数组
 * 输出描述
 * 输出为一个整型数组
 * 示例1
 * input
 * 5 2 C D +
 * output
 * 30
 */
public class 投篮大赛 {

    // 遍历操作字符串数组,模拟记录每个回合得分的情况。
    // 它使用了栈数据结构来实现各种操作。
    // 遇到不同的操作符号时,根据规则对栈中的数据进行相应的操作,最后计算栈中所有得分的总和并返回
    public static int calPoints(String[] ops) {
        Stack<Integer> stack = new Stack<>();

        for (String op : ops) {
            if (op.equals("+")) {
                int top = stack.pop();
                int newTop = top + stack.peek();
                stack.push(top);
                stack.push(newTop);
            } else if (op.equals("C")) {
                stack.pop();
            } else if (op.equals("D")) {
                stack.push(stack.peek() * 2);
            } else {
                stack.push(Integer.valueOf(op));
            }
        }

        int sum = 0;
        for (int score : stack) {
            sum += score;
        }

        return sum;
    }

    public static void main(String[] args) {
//        Scanner scanner = new Scanner(System.in);
//        System.out.println("请输入记录操作的字符串列表(用空格分隔):");
//        String input = scanner.nextLine();
//        String[] ops = input.split(" ");
//
//        int totalScore = calPoints(ops);
//        System.out.println("记录中所有得分的总和为:" + totalScore);
//

        // 示例1: 输入: 5 2 C D +
        String[] ops1 = {"5", "2", "C", "D", "+"};
        System.out.println("示例1输出: " + calPoints(ops1)); // 预期输出: 30

        // 示例2: 输入: 5 -2 4 C D 9 + +
        String[] ops2 = {"5", "-2", "4", "C", "D", "9", "+", "+"};
        System.out.println("示例2输出: " + calPoints(ops2)); // 预期输出: 27
    }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值