工信部蓝桥杯Python取回形取数答案

如本文章标有价格,需议价或其它事情商议请加微信scratch8

"""
回形取数就是沿矩阵的边取数,若当前方向上无数可取或已经取过,则左转90度。
一开始位于矩阵左上角,方向向下。

"""
# 输入行数与列数,
# map对序列中的每个数据取整,返回map对象,再用list转换成列表
row,col=list(map(int,input().split(',')))

# 形成数据矩形,二维嵌套列表
data_list=[]
c = 1
for x in range(row):
    nest = []
    for y in range(col):
        nest.append(c)
        c  = c + 1
    data_list.append(nest)
    
begin_r = row                # 开始行
begin_c = col                # 开始列

rounds=0                     # 表示圈
answers=[]                   # 结果列表

def get_one_round(begin_r,begin_c,rounds):
    """递归函数,获取一圈数据,从左上往下逆时针旋转。"""
    for r in range(rounds,begin_r):  # 列固定,行变化      
        answers.append(data_list[r][0+rounds])
        
    for c in range(1+rounds,begin_c): # 行固定,列变化        
        answers.append(data_list[begin_r-1][c])
        
    for r in range(begin_r-2,rounds-1,-1):
        # 开始的列要大于rounds才添加到列表中,防止重复添加数据
        if begin_c > rounds:answers.append(data_list[r][begin_c-1])
        
    for c in range(begin_c-2,rounds,-1):
        if begin_r > rounds: answers.append(data_list[rounds][c])
        
    rounds+=1
    if(rounds>=begin_r-1 or rounds>=begin_c-1): return
    # 接下来获取更小的一圈的数据
    get_one_round(begin_r-1,begin_c-1,rounds)
    
get_one_round(begin_r,begin_c,rounds)

for i in range(len(answers)):
    print(answers[i], end=' ' if i != len(answers)-1 else '')

    
    

本站所有作品,教程等皆为原创,版权所有。只供个人及单位内部研究使用,对外展示或传播必需经本站同意,且注明来自本站。培训机构等用本站资源培训学生,需经本站授权。一旦付款,表示同意本站知识付费原则:数字商品,不支持退款。亦可直接向微信号scratch8付款购买。入住QQ群:225792826 和爱好者共同交流,并且能下载免费提供的Python资源(需提供真实姓名才可入群)
李兴球的博客_Python创意编程技术前沿_pygame » 工信部蓝桥杯Python取回形取数答案
scratch

学本领,探索更大的世界!

李兴球博客 风火轮编程主页