news 2026/3/23 22:26:25

(新卷,100分)- 投篮大赛(Java JS Python)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
(新卷,100分)- 投篮大赛(Java JS Python)

(新卷,100分)- 投篮大赛(Java & JS & Python)

题目描述

你现在是一场采用特殊赛制投篮大赛的记录员。这场比赛由若干回合组成,过去几回合的得分可能会影响以后几回合的得分。
比赛开始时,记录是空白的。
你会得到一个记录操作的字符串列表 ops,其中ops[i]是你需要记录的第i项操作,ops遵循下述规则:

  • 整数x-表示本回合新获得分数x
  • “+” – 表示本回合新获得的得分是前两次得分的总和。
  • “D” – 表示本回合新获得的得分是前一次得分的两倍。
  • “C” – 表示本回合没有分数,并且前一次得分无效,将其从记录中移除。

请你返回记录中所有得分的总和。

输入描述

输入为一个字符串数组

输出描述

输出为一个整形数字

提示
  1. 1 <= ops.length <= 1000
  2. ops[i] 为 “C”、“D”、“+”,或者一个表示整数的字符串。整数范围是 [-3 * 10^4, 3 * 10^4]
  3. 需要考虑异常的存在,如有异常情况,请返回-1
  4. 对于“+”操作,题目数据不保证记录此操作时前面总是存在两个有效的分数
  5. 对于“C”和“D”操作,题目数据不保证记录此操作时前面存在一个有效的分数
  6. 题目输出范围不会超过整型的最大范围,不超过2^63 - 1
用例
输入5 2 C D +
输出30
说明“5”-记录加5,记录现在是[5]
“2”-记录加2,记录现在是[5,2]
“C”-使前一次得分的记录无效并将其移除,记录现在是[5].
“D”-记录加2*5=10,记录现在是[5,10].
“+”-记录加5+10=15,记录现在是[5,10,15].
所有得分的总和5+10+15=30
输入5 -2 4 C D 9 + +
输出27
说明

“5”-记录加5,记录现在是[5]
“-2”-记录加-2,记录现在是[5,-2]

“4”-记录加4,记录现在是[5,-2,4]

“C”-使前一次得分的记录无效并将其移除,记录现在是[5,-2].

“D”-记录加2*-2=4,记录现在是[5,-2, -4].

“9”-记录加9,记录现在是[5,-2, -4, 9].

“+”-记录加-4+9=5,记录现在是[5,-2, -4, 9, 5].

“+”-记录加-9+5=14,记录现在是[5,-2, -4, 9, 5, 14].

所以得分的总和 5 - 2 - 4 + 9 + 5 + 14 = 27

输入1
输出1
说明
输入+
输出-1
说明
题目解析

简单的逻辑题,按照题目意思写就行。

JavaScript算法源码
/* JavaScript Node ACM模式 控制台输入获取 */ const readline = require("readline"); const rl = readline.createInterface({ input: process.stdin, output: process.stdout, }); rl.on("line", (line) => { const ops = line.split(" "); console.log(getResult(ops)); }); function getResult(ops) { // ans用于保存每轮的得分 const ans = []; const reg = /^\-?\d+$/; for (let op of ops) { // 如果op是整数,则表示本轮得分,直接加入ans if (reg.test(op)) { ans.push(op - 0); } else { switch (op) { // 如果op是+,则表示本轮得分是前两轮得分之和,注意越界处理 case "+": if (ans.length < 2) return -1; ans.push(ans.at(-1) + ans.at(-2)); break; // 如果op是D,表示本轮得分是前一轮得分的双倍,注意越界处理 case "D": if (ans.length < 1) return -1; ans.push(ans.at(-1) * 2); break; // 如果op是C,则表示本轮无得分,且上一轮得分无效,需要去除 case "C": if (ans.length < 1) return -1; ans.pop(); break; } } } // 感谢网友m0_71826536提示,如果用例输入为:2 C,则此处会报错 // return ans.reduce((p, c) => p + c); if (ans.length) return ans.reduce((p, c) => p + c); else return 0; }
Java算法源码
import java.util.LinkedList; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); String str = sc.nextLine(); String[] ops = str.split(" "); System.out.println(getResult(ops)); } public static int getResult(String[] ops) { // ans用于保存每轮的得分 LinkedList<Integer> ans = new LinkedList<>(); String reg = "^\\-?\\d+$"; for (String op : ops) { // 如果op是整数,则表示本轮得分,直接加入ans if (op.matches(reg)) { ans.addLast(Integer.parseInt(op)); } else { switch (op) { // 如果op是+,则表示本轮得分是前两轮得分之和,注意越界处理 case "+": if (ans.size() < 2) return -1; ans.addLast(ans.getLast() + ans.get(ans.size() - 2)); break; // 如果op是D,表示本轮得分是前一轮得分的双倍,注意越界处理 case "D": if (ans.size() < 1) return -1; ans.addLast(ans.getLast() * 2); break; // 如果op是C,则表示本轮无得分,且上一轮得分无效,需要去除 case "C": // 感谢网友m0_71826536的提示,由于题目说:对于“C”和“D”操作,题目数据不保证记录此操作时前面存在一个有效的分数,因此这里C操作,不能直接removeLast,需要先判断ans是否有数据 if (ans.size() < 1) return -1; ans.removeLast(); break; } } } int sum = 0; for (Integer an : ans) { sum += an; } return sum; } }
Python算法源码
import re # 输入获取 ops = input().split() # 算法入口 def getResult(ops): # ans用于保存每轮的得分 ans = [] # 改正则用于判断op是否为一个整数,包括负数 pattern = r"^\-?\d+$" for op in ops: # 如果op是整数,则表示本轮得分,直接加入ans if re.match(pattern, op): ans.append(int(op)) else: # 如果op是+,则表示本轮得分是前两轮得分之和,注意越界处理 if op == "+": if len(ans) < 2: return -1 else: ans.append(ans[-1] + ans[-2]) # 如果op是D,表示本轮得分是前一轮得分的双倍,注意越界处理 elif op == "D": if len(ans) < 1: return -1 else: ans.append(ans[-1] * 2) # 如果op是C,则表示本轮无得分,且上一轮得分无效,需要去除 elif op == "C": if len(ans) < 1: return -1 else: ans.pop() else: return -1 ans.append(0) return sum(ans) # 调用算法 print(getResult(ops))
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/15 13:59:51

多Agent智能协作实战:基于Camel-AI构建高效AI团队,小白也能学会

本文详细介绍了多Agent智能协作的概念与实战应用&#xff0c;通过Camel-AI框架构建专业化AI团队。文章展示了如何定义不同角色Agent&#xff08;意图理解、知识检索、回复生成、质量审核&#xff09;&#xff0c;实现Agent间通信和协作流程&#xff0c;并提供了动态任务分配、性…

作者头像 李华
网站建设 2026/3/17 18:05:13

告别枯燥表格:手把手教你用MySQL解锁数据可视化

数据不只是冰冷的数字&#xff0c;而是等待讲述的故事。本文将带你从数据库直通炫酷图表&#xff0c;让数据自己“开口说话”。在数据驱动决策的时代&#xff0c;优秀的可视化能帮你从海量数据中迅速洞察趋势、发现异常。但很多人不知道&#xff0c;MySQL不仅能存储数据&#x…

作者头像 李华
网站建设 2026/3/17 8:51:35

云游戏挑选四大核心:延迟、画质、内容、价格——基于真实数据的决策手册

随着网络的演进与边缘计算节点的规模化、下沉式部署&#xff0c;云游戏行业已全面步入以“真实体验感知”为标尺的深水区。用户的需求从“能否运行”的基础层&#xff0c;跃升至“画质是否震撼”“跨场景是否连贯”的综合体验层。本次测评通过构建贴近真实用户日常使用场景的测…

作者头像 李华
网站建设 2026/3/14 6:16:56

【计算机毕业设计案例】基于django定制化ERP系统APP企业客户设备进销存系统小程序(程序+文档+讲解+定制)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

作者头像 李华
网站建设 2026/3/18 8:59:06

深入 Flink 数据源:RichSourceFunction 的设计与最佳实践

Flink DataStream API 实战:从 SourceFunction 到 RichSourceFunction 的进阶与优化 本文详细讲解了 Apache Flink 中源函数(Source Function)的演进,从最基础的 SourceFunction 到功能更强大的 RichSourceFunction,并结合数据库、Kafka 仿真及可配置化场景提供实战示例,…

作者头像 李华