📜  奇数方阵中间行和列的乘积(1)

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

奇数方阵中间行和列的乘积

简介

本程序用于计算给定的奇数阶方阵中间行和列的乘积。既可以手动输入方阵,也支持随机生成方阵,计算结果会自动显示在屏幕上。

使用方法
1. 手动输入方阵

手动输入方阵时,按照提示依次输入方阵每一行的元素,输入完成后程序会自动计算中间行和列的乘积并显示出来。

from typing import List

def get_matrix() -> List[List[int]]:
    """
    手动输入方阵
    """
    n = int(input("请输入方阵的阶数:"))
    matrix = []
    for i in range(n):
        row = list(map(int, input(f"请输入第{i+1}行的元素,以空格分隔:").split()))
        matrix.append(row)
    return matrix

def calc_prod(matrix: List[List[int]]) -> int:
    """
    计算奇数方阵中间行和列的乘积
    """
    n = len(matrix)
    if n % 2 == 0:
        raise ValueError("输入的不是奇数阶方阵!")
    middle = n // 2
    row_prod = 1
    col_prod = 1
    for i in range(n):
        row_prod *= matrix[middle][i]
        col_prod *= matrix[i][middle]
    return row_prod * col_prod

if __name__ == '__main__':
    matrix = get_matrix()
    prod = calc_prod(matrix)
    print("中间行和列的乘积为:", prod)
2. 随机生成方阵

随机生成方阵时,按照提示输入方阵的阶数和元素的最大值,程序会自动生成并打印出方阵,然后计算中间行和列的乘积并显示出来。

from typing import List
import random

def generate_matrix(n: int, max_val: int) -> List[List[int]]:
    """
    随机生成n阶方阵,每个元素的取值范围是[-max_val, max_val]
    """
    matrix = []
    for i in range(n):
        row = [random.randint(-max_val, max_val) for j in range(n)]
        matrix.append(row)
    return matrix

def calc_prod(matrix: List[List[int]]) -> int:
    """
    计算奇数方阵中间行和列的乘积
    """
    n = len(matrix)
    if n % 2 == 0:
        raise ValueError("输入的不是奇数阶方阵!")
    middle = n // 2
    row_prod = 1
    col_prod = 1
    for i in range(n):
        row_prod *= matrix[middle][i]
        col_prod *= matrix[i][middle]
    return row_prod * col_prod

if __name__ == '__main__':
    n = int(input("请输入方阵的阶数:"))
    max_val = int(input("请输入元素的最大值:"))
    matrix = generate_matrix(n, max_val)
    print("随机生成的方阵为:")
    for row in matrix:
        print(row)
    prod = calc_prod(matrix)
    print("中间行和列的乘积为:", prod)
注意事项
  • 输入的方阵必须是奇数阶方阵,否则程序会抛出异常。
  • 输入的元素必须为整数,否则会导致计算结果错误。
  • 随机生成的方阵可能会存在特别小或特别大的元素,导致计算结果非常大或非常小,这需要特别注意。