/*** 題目描述* 你現在是一場采用特殊賽制投籃大賽的記錄員。這場比賽由若干回合組成,過去幾回合的得分可能會影響以后幾回合的得分。* 比賽開始時,記錄時空白的。你會得到一個記錄操作的字符串列表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}
}