python 数组按反对角线顺序输出

题目简述:
假如有一个3行4列的数字
1,2,3,4
5,6,7,8
9,10,11,12
要按1,2,5,3,6,9,4,7,10,8,11,12的顺序输出

输入样例样例:
2
4
1,2,3,4,5,6,7,8
输出样例:
1 2 5 3 6 4 7 8

思路:
一开始我想到是弄成2维数组,m,n记录遍历位置,越界后返回合法位置继续遍历,后来我想到了一种巧妙思路
仔细观察不难发现遍历的时候越界一般会返回第一行或者最后一列之后再按反对角线遍历
那么我可以建立2个数组,一个只放原数组第一行和最后一列的元素,第二个数组放原数组剩下的元素
比如题目描述
A=[1,2,3,4,8,12]
B=[5,6,7,9,10,11]
遍历A中的元素,当A中元素+(5-2)在B中存在就输出

 for i in A:
            print(i, end=' ')
            while B.count(i + T) != 0:
                print(i + T, end='')
                i += T

源代码:

class ArrayItem():
    def Method(self):
        A = []
        B = []
        m = input('row:')
        n = input('col:')
        m = int(m)
        n = int(n)
        a = []
        a.extend(input("Please input a array ,item split with ',': ").split(','))
        b = []
        for i in a:
            b.append(int(i))
        if len(b)!=m*n:
            print('Error!!!')
        else:
            for i in range(0, n):
                A.append(b[i])
            k = b[n - 1] + n
            while b.count(k) != 0:
                A.append(k)
                k += n
            for i in b:
                if A.count(i) == 0:
                    B.append(i)
            T = b[n] - b[1]
            for i in A:
                print(i, end=' ')
                while B.count(i + T) != 0:
                    print(i + T, end='')
                    i += T

def main():
    array=ArrayItem()
    array.Method()

if __name__ == '__main__':
    main()

效果图:
在这里插入图片描述
后记:
任何题目要多想想办法,解法不是唯一的,简洁是永恒的追求。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值