news 2026/9/26 20:02:17

(新卷,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/24 21:57:33

用提示工程让大模型自己检查自己:CoVe方法有效减少幻觉

LLM幻觉问题至今没有根治方案。RAG能缓解一部分&#xff0c;但成本高、架构复杂&#xff0c;而且只适用于有外部知识源的场景。而对于模型"应该知道但经常搞错"的那类问题&#xff0c;比如历史事件的时间线、人物履历的细节&#xff0c;RAG帮不上什么忙。 Chain-of-…

作者头像 李华
网站建设 2026/9/23 15:04:14

《C 指针》

《C 指针》 引言 C语言中的指针是C语言编程中非常重要的一部分,它为程序员提供了强大的功能,使得内存操作变得灵活且高效。本文将深入探讨C语言中的指针概念、用法以及在实际编程中的应用,帮助读者更好地理解和掌握C语言指针。 一、指针的概念 指针是C语言中的一种特殊变…

作者头像 李华
网站建设 2026/9/25 19:02:24

DOM XMLHttpRequest

DOM XMLHttpRequest 引言 在Web开发中,与服务器进行异步通信是非常重要的。XMLHttpRequest(简称XHR)是JavaScript中用于实现这种通信的一种技术。它允许网页与服务器交换数据而不需要重新加载整个页面。本文将详细介绍DOM中的XMLHttpRequest对象,包括其基本用法、属性、方…

作者头像 李华
网站建设 2026/9/24 4:01:14

Python 日期和时间处理指南

Python 日期和时间处理指南 引言 Python 是一种功能强大的编程语言,在数据处理、科学计算和软件开发等领域有着广泛的应用。在处理时间序列数据、日志记录以及系统时间管理时,日期和时间的正确处理至关重要。Python 提供了丰富的库来处理日期和时间,本文将详细介绍 Python…

作者头像 李华
网站建设 2026/9/26 18:43:37

小程序毕设项目推荐-基于django+小程序的工厂定制化ERP办公系统APP小程序【附源码+文档,调试定制服务】

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

作者头像 李华