news 2026/9/12 14:03:12

(新卷,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/9/2 5:48:52

(新卷,200分)- 报文解压缩(Java JS Python)

(新卷,200分)- 报文解压缩&#xff08;Java & JS & Python&#xff09;题目描述为了提升数据传输的效率&#xff0c;会对传输的报文进行压缩处理。输入一个压缩后的报文&#xff0c;请返回它解压后的原始报文。压缩规则&#xff1a;n[str]&#xff0c;表示方括号内部的…

作者头像 李华
网站建设 2026/9/5 22:00:37

河北石家庄/山东济南/天津商场美陈氛围升级设计公司【力荐】

在华北的商业图景中&#xff0c;商场正逐渐成为连接地域文化与当代生活的视觉载体。石家庄的质朴、济南的泉韵、天津的多元——三座城市的空间美学呈现出不同的文化肌理&#xff0c;也共同面对着商业氛围如何与城市气质相融的当代命题。肆墨设计顾问有限公司 肆墨设计是一家从事…

作者头像 李华
网站建设 2026/9/3 1:39:49

强烈安利!本科生必用10款一键生成论文工具测评

强烈安利&#xff01;本科生必用10款一键生成论文工具测评 学术写作工具测评&#xff1a;为什么你需要这份2026榜单 在当前高校学术环境日益复杂的背景下&#xff0c;本科生的论文写作任务不仅数量增加&#xff0c;对质量与规范的要求也不断提升。面对选题困难、文献整理繁琐、…

作者头像 李华
网站建设 2026/9/12 9:38:47

B 树 vs B+ 树:为什么 MySQL 用 B+ 树,而不是 B 树?

&#x1f333; B 树 vs B 树&#xff1a;为什么 MySQL 用 B 树&#xff0c;而不是 B 树&#xff1f;B 树不是 B 树的“升级版”&#xff0c;而是为“范围查询”而生的专用结构。如果你学过数据结构&#xff0c;一定听说过 B 树&#xff08;B-Tree&#xff09;&#xff1b; 如果…

作者头像 李华
网站建设 2026/9/10 7:43:46

BLE 蓝牙开发入门:用手机控制开发板 LED

&#x1f4f1; BLE 蓝牙开发入门&#xff1a;用手机控制开发板 LED学 BLE&#xff0c;不从点灯开始&#xff0c;等于白学。 这一篇&#xff0c;我们用最经典、成功率最高的 BLE Demo&#xff1a; 手机 → 蓝牙 → 单片机 → 控制 LED 帮你真正入门 BLE&#xff0c;而不是只停留…

作者头像 李华
网站建设 2026/9/3 1:38:56

MySQL + MQ 最终一致性终极方案:Outbox + 幂等 + 补偿 + 对账全解析

适用对象:后端架构师 / 高级开发 / 分布式系统设计者 适用场景:订单系统、支付系统、库存系统、账户系统、积分系统、异步解耦系统 MQ 示例:RocketMQ(Kafka、Pulsar 原理一致) 一、问题背景:为什么分布式系统一定会“不一致”? 在微服务架构中,最常见的模式是: 业务服…

作者头像 李华