蓝桥杯2022年第十三届省赛真题-矩形拼接-PYTHON解法

题目描述

 解题思路

1.先搞清楚最少拼接有多少条边,最多拼接有多少条边。一共有3种情况,第一种理想情况,举个例子也就是一共有3个正方形都相等拼起来就是4条边,第二种情况就是像题上这种有两个矩形可以拼接在另一个矩形的边上这样拼接完后是6条边,第三种就是最多的也是最不理想的情况,举个例子有3个分别是2*2,3*3,4*4的矩阵拼就会拼出8条边。

2.综上所述,应该只会出现4,6,8这三种情况。

四条边时

1.第一种情况,比较完美也就是三个矩阵都有一条边相等,这种情况就是4条边。

2. 第二种情况,当有一个矩阵的边等于另外两个矩阵边的合,比如x1=x2+x3,这样就把第二个矩阵的x2边和第三个矩阵的x3边拼接在第一个矩阵x1上,如果第二个矩阵除去x2这条边可以和第三个矩阵除去x3这条边可以重合也就是题给的第一个例子那么就是4条边。

六条边时

1.第一种情况是如果有两个矩阵有一条边相等,那么合并后就是6条边

2.第二种情况是有一个矩阵的边等于另外两个矩阵边的合,比如x1=x2+x3但是仅仅满足这个条件

八条边

不满足以上情况就是八条边

综上所述,我们应该先将边设置为8,然后依次判断是否为4条边,然后6条边的判定条件其实就是4条边的弱化然后判断是不是6条边,最后判定是不是8条边。

代码

def check4(x1,x2,x3,a):
    if x1==x2+x3 and a[2]+a[3]-x2==a[4]+a[5]-x3:
        return True
    if x2==x1+x3 and a[0]+a[1]-x1==a[4]+a[5]-x3:
        return True
    if x3==x2+x1 and a[0]+a[1]-x1==a[2]+a[3]-x2:
        return True
    return False
def check6(x1,x2,x3):
    if x1==x2+x3 or x2==x1+x3 or x3==x2+x1:
        return True
    return False
if __name__=='__main__':
    #3个矩阵拼接一共有3种情况,情况最好拼接完成有4条边,情况最差拼接出来有8条边,中间情况为6条边
    N=int(input())
    for n in range(N):
        edge = 8  # 最多是8条边
        a=list(map(int,input().strip().split()))
        for i in range(0,2):#取第一个矩阵的边
            for j in range(2,4):#取第二个矩阵的边
                for k in range(4,6):#取第三个矩阵的边
                    x1,x2,x3=a[i],a[j],a[k]#取出后的边进行分别判断情况
                    if x1==x2 and x2==x3:#第一种情况,比较完美也就是三个矩阵都有一条边相等,这种情况就是4条边
                        edge=min(edge,4)
                    if check4(x1,x2,x3,a):
                        #第二种情况,当有一个矩阵的边等于另外两个矩阵边的合,比如x1=x2+x3,这样就把第二个矩阵的x2边和第三个矩阵的x3边拼接在第一个矩阵x1上
                        #如果第二个矩阵除去x2这条边可以和第三个矩阵除去x3这条边可以重合也就是题给的第一个例子那么就是4条边
                        edge=min(edge,4)
                    if x1==x2 or x2==x3 or x1==x3:#第三种情况如果有两个矩阵有一条边相等,那么合并后就是6条边
                        edge=min(edge,6)
                    if check6(x1,x2,x3):
                        #第四种情况,其实就是第二种情况的弱化,有一个矩阵的边等于另外两个矩阵边的合,比如x1=x2+x3但是仅仅满足这个条件
                        #也就是题目给的第二种情况,这样的情况就是6条边
                        edge=min(edge,6)
        print(edge)

  • 4
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值