矩形拼接 蓝桥杯 2154

问题描述

已知 3 个矩形的大小依次是 a1​×b1​,a2​×b2​ a3​×b3​ 。用这 3 个矩形能拼 出的所有多边形中, 边数最少可以是多少?

例如用 3×23×2 的矩形(用 A 表示)、 4×14×1 的矩形 (用 B 表示) 和 2×42×4 的矩 形(用 C 表示)可以拼出如下 4 边形。

例如用3×2 的矩形 (用 A 表示)、 3×1 的矩形(用 B 表示) 和 1×1的矩 形(用 C 表示)可以拼出如下 6 边形。

输入格式

输入包含多组数据。

第一行包含一个整数 T, 代表数据组数。

以下 T 行, 每行包含 6 个整数 a1​,b1​,a2​,b2​,a3​,b3​, 其中a1​,b1​ 是第一个矩 形的边长, a2​,b2​ 是第二个矩形的边长, a3​,b3​ 是第三个矩形的边长。

输出格式

对于每组数据, 输出一个整数代表答案。

样例输入

2
2 3 4 1 2 4
1 2 3 4 5 6

样例输出

4
6

思路:首先得分析三个矩阵拼在一起会有几种情况

四边形时

 1.当三个矩阵的边长有一边都相等时

2.像例子中那样,有两个矩阵的一个边相等,另外两个边之和跟第三个矩阵的一个边相等

六边形时

1.当两个矩阵的边长之和等于第三个矩阵的一条边

2.只有两个矩阵有一边相等

八边形时

其他情况均为八边形

def bian4(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 bian6(x1,x2,x3):#三个矩阵中的两个有一条边长相等时
    if x1==x2+x3 or x2==x1+x3 or x3==x2+x1:
        return True
    return False
    #3个矩阵拼接一共有3种情况,情况最好拼接完成有4条边,情况最差拼接出来有8条边,中间情况为6条边
N=int(input())
for n in range(N):
  edge = 8  # 最多是8条边
  a=list(map(int,input().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 bian4(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 bian6(x1,x2,x3):
                        #第四种情况,有一个矩阵的边等于另外两个矩阵边的合,比如x1=x2+x3但是仅仅满足这个条件
                        #也就是题目给的第二种情况,这样的情况就是6条边
          edge=min(edge,6)
  print(edge)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小梁今天敲代码了吗

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值