题目描述
解题思路
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)