基础练习 回形取数(蓝桥杯)python BASIC-25 初学者适用

题目

原题

初始的代码

这道题初看题目我觉得没有什么难度,就是循环+判断嘛。但是等到自己上手了以后发现问题还是挺多的,上网上找到了几个现成的答案,但是感觉别人写的代码有点晦涩难懂,最后只看懂了下面这个“半成品”:

m,n = map(int,input().split())

ls = [[] for i in range(m)]
for i in range(m):
    line = input().split()
    for j in range(n):
        ls[i].append(line[j])

for i in range(m):
    print(ls[i][0],end=' ')

for j in range(1,n):
    print(ls[m-1][j],end=' ')

for i in range(m-2,-1,-1):
    print(ls[i][n-1],end=' ')

for j in range(n-2,0,-1):
    print(ls[0][j],end=' ')

说是半成品,是因为这段代码只实现了绕矩阵最外层一圈取数,取一次就结束了,还远远达不到要求。

最后的代码

m,n = map(int,input().split())
#获得行列大小
if m<n:
    min=m
else:
    min=n
s=int(min/2+0.5)
#取最小边/2后四舍五入,得到的结果就是需要循环几圈,为什么是这样做可以自己思考几种情况   
ls = [[] for i in range(m)]
for i in range(m):
    line = input().split()
    for j in range(n):
        ls[i].append(line[j])
#录入矩阵
for k in range(s):         
    for i in range(m):
        print(ls[i][0],end=' ')
    
    for j in range(1,n):
        print(ls[m-1][j],end=' ')
    
    if m-2<0 or n-2<0:
        break
    #循环1次长宽各少2
    #后面两次输出必须要判断是否还有必要进行,否则会重复输出,这在m不等于n的时候会有所体现
    for i in range(m-2,-1,-1):
        print(ls[i][n-1],end=' ')
    
    for j in range(n-2,0,-1):
        print(ls[0][j],end=' ')
    
    m=m-2
    n=n-2

    ls2 = [[] for i in range(m)]
    for i in range(m):
        for j in range(n):           
                ls2[i].append(ls[i+1][j+1])    
    ls=ls2
    #将ls裁剪掉已循环输出的部分,剩下的进入下一次循环
    

自认为我的代码是全网目前来说这道题最简单易懂的解法,另外这也是我看CSDN以来第1篇blog,谨以此文感谢CSDN曾经对我的帮助!

后天就要去参加蓝桥杯了,这是从2017年到现在第3次了,也是最后一次了,冲鸭!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值