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
    
  • 相关阅读:
    JAVA并发编程学习笔记之ReentrantLock
    服务架构演进
    Java集群优化——dubbo+zookeeper构建高可用分布式集群
    Dubbo实例
    hessian学习
    JAVA分布式事务原理及应用
    了解AngularJS $resource
    AngularJS Resource:与 RESTful API 交互
    Hibernate解决高并发问题之:悲观锁 VS 乐观锁
    互联网金融高并发方案
  • 原文地址:https://www.cnblogs.com/BigShuang/p/15690328.html
Copyright © 2011-2022 走看看