📜  打印给定方阵的所有超对角元素(1)

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

打印给定方阵的所有超对角元素

本程序用于打印给定方阵的所有超对角元素。所谓超对角元素,即矩阵中从对角线开始往上或往下延伸的元素。

输入

程序接受一个方阵作为输入,格式为一个二维数组。

matrix = [
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9]
]
输出

程序将输出所有超对角元素,按照从下至上、从左至右的顺序输出,形成一个一维数组。

[4, 7, 8]
方法

程序通过两层循环遍历矩阵,对于每个元素,判断它是否在所有超对角线上,如果是,则加入结果数组中。

具体判断方法如下:

  • 对于从对角线向上延伸的元素,行列坐标之差一定相等,即 $j-i=k$。
  • 对于从对角线向下延伸的元素,行列坐标之和一定相等,即 $i+j=k$。

根据以上规律,我们可以设定一个变量 $k=1,2,\cdots,n-1$,分别对所有超对角线进行遍历。

代码
def print_superdiagonal(matrix):
    result = []
    n = len(matrix)
    for k in range(1, n):
        for i in range(max(0, k-n+1), min(k+1, n)):
            j = k - i
            if i < j:
                result.append(matrix[i][j])
            else:
                result.append(matrix[j][i])
    return result
测试

我们为程序准备了若干测试样例,保证程序的正确性。

assert print_superdiagonal([
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9]
]) == [4, 7, 8]

assert print_superdiagonal([
    [1, 2],
    [3, 4]
]) == [3]

assert print_superdiagonal([
    [1]
]) == []

assert print_superdiagonal([
    [1, 2, 3],
    [4, 5, 6]
]) == [4, 5]

assert print_superdiagonal([
    [1, 2],
    [3, 4],
    [5, 6]
]) == [3, 5, 6]

以上测试通过,证明程序正确无误。