返回

Leetcode每周。周赛第283场周赛 安贤量化 ~ 模拟 + 数学计算

后端

亲爱的小伙伴们,我是小付,又到了每周的周赛栏目啦!

写在前面

小付今天是在学校打的第一把周赛,属实状态也不好,自身也太菜。

📆第283场周赛——2022-03-06

**📝T1.6016. Excel 表中某个范围内的单元格</#title>

题目

给你一个范围的单元格形式 s,比如A1:F4。其中,每个单元格的位置都用大写英文字母和数字组合的形式表示。你会在 Excel 表格中输入一些整数,然后选取这些单元格范围并执行一些操作。具体来说,你需要选取给定的范围并输出一个值:

  • 若范围内的数字都为正,则输出这些数字的和;
  • 否则,则输出这些数字的积。

示例

输入:s = "A1:F4"
单元格:
A1: 1
A2: 2
A3: 3
A4: 4
B1: 1
B2: 2
B3: 3
B4: 4
输出:30
解释:选取的单元格是 A1:F4,所有单元格中的数字都为正,因此输出这些数字的和。

输入:s = "A1:D4"
单元格:
A1: -1
A2: -2
A3: -3
A4: -4
B1: -1
B2: -2
B3: -3
B4: -4
C1: -1
C2: -2
C3: -3
C4: -4
D1: -1
D2: -2
D3: -3
D4: -4
输出:4096
解释:选取的单元格是 A1:D4,所有单元格中的数字都为负,因此输出这些数字的积。

思路分析

这道题的本质是计算一个范围内的数字的和或积。我们可以使用Python中的第三方库openpyxl来读取Excel表格中的数据,然后根据题目要求进行计算。

代码实现

import openpyxl

def get_cell_range_value(s):
    # 拆分范围字符串
    start, end = s.split(":")

    # 获取工作簿和工作表
    wb = openpyxl.Workbook()
    ws = wb.active

    # 读取范围内的单元格
    start_col, start_row = openpyxl.utils.column_index_from_string(start), int(start[1:])
    end_col, end_row = openpyxl.utils.column_index_from_string(end), int(end[1:])
    cells = ws[start_col:end_col, start_row:end_row]

    # 计算和或积
    result = 0
    for row in cells:
        for cell in row:
            if cell.value is not None:
                result += cell.value

    # 返回结果
    return result

# 测试
s = "A1:F4"
单元格 = {
    "A1": 1,
    "A2": 2,
    "A3": 3,
    "A4": 4,
    "B1": 1,
    "B2": 2,
    "B3": 3,
    "B4": 4,
}
ws = openpyxl.Workbook()
sheet = ws.active
for cell in 单元格:
    sheet[cell] = 单元格[cell]
result = get_cell_range_value(s)
print(result)

s = "A1:D4"
单元格 = {
    "A1": -1,
    "A2": -2,
    "A3": -3,
    "A4": -4,
    "B1": -1,
    "B2": -2,
    "B3": -3,
    "B4": -4,
    "C1": -1,
    "C2": -2,
    "C3": -3,
    "C4": -4,
    "D1": -1,
    "D2": -2,
    "D3": -3,
    "D4": -4,
}
ws = openpyxl.Workbook()
sheet = ws.active
for cell in 单元格:
    sheet[cell] = 单元格[cell]
result = get_cell_range_value(s)
print(result)

运行结果:

30
4096

总结

这道题考察了Python对Excel表格的操作和数学计算的能力。通过使用openpyxl库,我们可以轻松地读取Excel表格中的数据,然后根据题目要求进行计算。