zoukankan      html  css  js  c++  java
  • 大爽Python入门练习题 32 生成回形矩阵

    大爽Python入门练习题总目录

    第三章 中期练习题 困难 第2题

    题目

    简介

    实现一个函数generate_matrix(m, n)
    接受两个正整数mn作为参数

    返回一个mn列的特殊矩阵(二维列表)。
    该矩阵最外面一圈值都为0,
    里面一圈为1,
    再往里一圈都为2,
    依次类推

    详细说明

    题意中,34列的特殊矩阵(二维列表)如下

    matrix = [
        [0, 0, 0, 0, 0, 0],
        [0, 1, 1, 1, 1, 0],
        [0, 1, 2, 2, 1, 0],
        [0, 1, 1, 1, 1, 0],
        [0, 0, 0, 0, 0, 0]
    ]
    

    示例

    示例一

    matrix = generate_matrix(5, 6)
    for row in matrix:
        print(row)
    

    输出为

    [0, 0, 0, 0, 0, 0]
    [0, 1, 1, 1, 1, 0]
    [0, 1, 2, 2, 1, 0]
    [0, 1, 1, 1, 1, 0]
    [0, 0, 0, 0, 0, 0]
    

    示例一

    matrix = generate_matrix(7, 10)
    for row in matrix:
        print(row)
    

    输出为

    [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
    [0, 1, 1, 1, 1, 1, 1, 1, 1, 0]
    [0, 1, 2, 2, 2, 2, 2, 2, 1, 0]
    [0, 1, 2, 3, 3, 3, 3, 2, 1, 0]
    [0, 1, 2, 2, 2, 2, 2, 2, 1, 0]
    [0, 1, 1, 1, 1, 1, 1, 1, 1, 0]
    [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
    

    分割线

    本小段没有实际意义,
    仅用于分隔题目和答案。
    防止学生无意中直接看到答案,
    影响思路。



















    答案

    思路来自直播彈幕:栢栢酱 說: aij=min(i,m-i,j,n-j)
    感谢栢栢酱的思路:格子的值为到四个边界的最短距离
    比我原本的思路好。我本来想的使用循环一层一层做,其实比较麻烦。

    def get_min(*args):
        # 其实也可以直接使用python内置函数`min`
        # 我这里相当手动实现了一遍
        min_v = args[0]
        for v in args:
            if v < min_v:
                min_v = v
    
        return min_v
    
    def generate_matrix(m, n):
        matrix = [
            [get_min(ri, ci, n-ci-1, m-ri-1) for ci in range(n)]
            for ri in range(m)
        ]
    
        return matrix
    
  • 相关阅读:
    编译内核开始的小问题Unable to find the Ncurses libraries
    qq for linux Ubuntu 64位兼容
    ubuntu下安装lighttpd
    搭建boa服务器
    INI file and Iniparser
    kernel常用.gitignore配置
    光谱学习
    jump to case label fpermissive
    Qt通用方法及类库5
    Qt通用方法及类库1
  • 原文地址:https://www.cnblogs.com/BigShuang/p/15690328.html
Copyright © 2011-2022 走看看