📅  最后修改于: 2023-12-03 15:39:42.099000             🧑  作者: Mango
本程序用于打印给定方阵的所有超对角元素。所谓超对角元素,即矩阵中从对角线开始往上或往下延伸的元素。
程序接受一个方阵作为输入,格式为一个二维数组。
matrix = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
]
程序将输出所有超对角元素,按照从下至上、从左至右的顺序输出,形成一个一维数组。
[4, 7, 8]
程序通过两层循环遍历矩阵,对于每个元素,判断它是否在所有超对角线上,如果是,则加入结果数组中。
具体判断方法如下:
根据以上规律,我们可以设定一个变量 $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]
以上测试通过,证明程序正确无误。