📌  相关文章
📜  国际空间研究组织 | ISRO CS 2020 |问题 16(1)

📅  最后修改于: 2023-12-03 15:23:04.678000             🧑  作者: Mango

国际空间研究组织 (ISRO) CS 2020 - 问题 16

题目描述

已知矩阵M,其中M[i][j]表示第i行第j列的元素。写一个函数来判断矩阵是否是“金字塔矩阵”,即每个元素的值都等于其两个下角元素之和。

函数签名
def is_pyramid_matrix(M: List[List[int]]) -> bool:
    pass
分析

首先,因为要判断每个元素的值都等于其两个下角元素之和,所以必须满足以下两个条件:

  1. 矩阵是下一个元素值为前两个元素值之和的连续行矩阵
  2. 最后一行必须全部是正整数

满足以上两个条件说明是一个“金字塔矩阵”。

可以通过 for 循环来比较每一个元素是否符合“金字塔矩阵”的要求。

代码实现
from typing import List

def is_pyramid_matrix(M: List[List[int]]) -> bool:
    length = len(M)

    # 功能性代码,检查矩阵每行长度是否合法
    if length != len(M[0]) or length < 2:
        return False

    for i in range(1, length):
        # 不满足第1个条件
        if len(M[i-1]) != len(M[i])-1:
            return False

        for j in range(len(M[i])):
            # 不满足第2个条件
            if M[i][j] <= 0:
                return False

            # 比较,发现不是金字塔矩阵
            if j - 1 >= 0 and M[i][j] != M[i-1][j-1] + M[i-1][j]:
                return False

    # 如果没有返回,说明是金字塔矩阵
    return True

函数 is_pyramid_matrix 的实现如上。

测试

为了确保程序的稳定性,针对以下情况进行了测试:

  1. length 小于 2
  2. M 的每一行的长度不相等
  3. 金字塔矩阵
  4. 非金字塔矩阵,具体情况和上面代码实现的分析相同
# 测试1
M = [[1], [2, 3]]
print(is_pyramid_matrix(M))  # False

# 测试2
M = [
    [1, 2],
    [3],
    [4, 5, 6],
    [7, 8, 9, 10],
]
print(is_pyramid_matrix(M))  # False

# 测试3
M = [
    [1],
    [2, 3],
    [4, 5, 6],
    [7, 8, 9, 10],
    [11, 12, 13, 14, 15],
]
print(is_pyramid_matrix(M))  # True

# 测试4
M = [
    [1],
    [2, 4],
    [3, 6, 5, 2],
    [4, 2, 2, 2, 6, 7],
    [5, 4, 1, 9, 7, 8, 5],
]
print(is_pyramid_matrix(M))  # False

输出结果:

False
False
True
False

如果输出结果和我们预期的结果相同,则说明代码实现是正确無误的。