华为OD机试真题 Python 实现【投篮大赛】【2023Q1 100分】

在这里插入图片描述

目录

    • 一、题目描述
    • 二、输入描述
    • 三、输出描述
    • 四、解题思路
    • 五、Python算法源码
    • 六、效果展示
      • 1、输入
      • 2、输出
      • 3、说明

一、题目描述

你现在是一场采用特殊赛制投篮大赛的记录员。

这场比赛由若于回合组成,过去几回合的得分可能会影响以后几回合的得分,比赛开始时,记录是空白的。

你会得到一个记录操作的字符串列表 ops,其中 ops[i] 是你需要记录的第i项操作,ops 遵循下述规则:

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

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

二、输入描述

输入为一个字符串数组。

三、输出描述

输出为一个整形数字。

四、解题思路

  1. 创建一个空的双端队列list,用于记录得分;
  2. 循环遍历操作字符串数组ops中的每个操作:
    • 如果操作是整数,则将其转换为整数并将其添加到队列list中,表示本回合新获得分数;
    • 如果操作是"+",则需要计算本回合新获得的得分是前两次得分的总和:
      • 首先检查队列list的元素个数是否大于等于2,若小于2,则表示无法计算总和,输出-1;
      • 从队列list的尾部取出最后两个元素,并计算它们的总和;
      • 将计算得到的总和添加到队列list的尾部,并恢复原来的两个元素顺序;
    • 如果操作是"C",表示本回合没有分数,并且前一次得分无效,将其从队列list中移除,即移除队列尾部的元素;
    • 如果操作是"D",表示本回合新获得的得分是前一次得分的两倍:
      • 首先获取队列list的最后一个元素,并将其乘以2后添加到队列list的尾部;
  3. 循环结束后,计算队列list中所有得分的总和,将其输出;

五、Python算法源码

def calculate(ops):
    scores = deque()  # 使用双端队列记录得分

    for op in ops:
        if op.isdigit():
            # 如果操作是一个数字,则将其添加到队列中
            scores.append(int(op))
        elif op == '+':
            # 如果操作是 '+'
            if len(scores) < 2:
                # 得分数量不足以计算总和
                return -1
            # 计算最后两次得分的总和
            cur_score = scores[-1] + scores[-2]
            scores.append(cur_score)
        elif op == 'C':
            # 如果操作是 'C',移除最后一次得分
            scores.pop()
        elif op == 'D':
            # 如果操作是 'D',将最后一次得分翻倍
            if len(scores) < 1:
                # 没有得分可以翻倍
                return -1
            # 将最后一次得分翻倍后添加到队列中
            cur_score = scores[-1] * 2
            scores.append(cur_score)

    # 计算队列中所有得分的总和
    total_score = sum(scores)
    return total_score

六、效果展示

1、输入

3 2 2 + 3 C 2 D

2、输出

17

3、说明

哪吒投了一个超远4分、又投了两个中距离3分,

+:表示本回合新获得的得分是前两次得分的总和;

4 + 3 + (3 + 3)

哪吒又投了一个超远4分,可惜犯规了C,4分不算。

C:表示本回合没有分数,并且前一次得分无效,将其从记录中移除;

4 + 3 + (3 + 3) + 4 - 4

哪吒又投了一个3分,

D:表示本回合新获得的得分是前一次得分的两倍;

卧槽,爆珠了,翻倍、

4 3 3 + 4 C 3 D

4 + 3 + 3 + (3 + 3) + 4 - 4 + 3 + (3 * 2) = 25

哪吒参加三分大赛,以25分的高分,力压斯蒂芬库里夺得三分大赛冠军。

华为OD机试真题 Python 实现【投篮大赛】【2023Q1 100分】_第1张图片

华为OD机试真题 Python 实现【投篮大赛】【2023Q1 100分】_第2张图片



下一篇:华为OD机试真题 Python 实现【相对开音节】【2022Q4 100分】,附详细解题思路

本文收录于,华为OD机试(Python)真题(A卷+B卷)

每一题都有详细的答题思路、详细的代码注释、样例测试,订阅后,专栏内的文章都可看,可加入华为OD刷题群(私信即可),发现新题目,随时更新,全天CSDN在线答疑。

在这里插入图片描述

你可能感兴趣的:(python,开发语言,人工智能)