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

文章介绍了如何利用给定的三个矩形a1×b1,a2×b2,a3×b3拼接成多边形时,确定边数最少的情况,包括4条边(完全覆盖)、6条边(两对边相等)和8条边(无重复边)。提供了解题思路和Python代码实现。
摘要由CSDN通过智能技术生成

题目描述

已知 3 个矩形的大小依次是 a1 × b1, a2 × b2 和 a3 × b3。用这 3 个矩形能拼出的所有多边形中,边数最少可以是多少?例如用 3 × 2 的矩形(用 A 表示)、4 × 1 的矩形(用 B 表示)和 2 × 4 的矩形(用 C 表示)可以拼出如下 4 边形。

蓝桥杯2022年第十三届省赛真题矩形拼接1

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

蓝桥杯2022年第十三届省赛真题矩形拼接2

输入格式

输入包含多组数据。

第一行包含一个整数 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

解题思路

图片参考博文:蓝桥杯——矩形拼接_蓝桥杯矩形拼接-CSDN博客

三个矩形进行拼接,最终组成的边数仅包含 3 种情况:

1、4 条边,此时 3 个矩形可以组成 1 个大矩形,存在两种可能:

三个矩形存在一条长度相同的边,这样可以按照这条边组成大矩形

三个矩形中存在一个矩形等于另外两个矩形的边长之和,并且另外两个矩形的另一条边相同。

2、6 条边:

三个矩形中任意两个存在相同的边

三个矩形中存在一个矩形等于另外两个矩形的边长之和,并且另外两个矩形的另一条边不同。

3、8 条边,除去上面的所有情况。

这样我们可以轮流判断三个矩形,对于每个矩形的每条边进行逐一判断。

代码

t = int(input())
def check6(a,b,c):
    if a+b==c or a+c==b or b+c==a:
        return True
    elif a==b or a==c or b ==c:
        return True
    else:
        return False
def check4(a1,b1,a2,b2,a3,b3):
    for i in [a1,b1]:
        if i == a2+a3 and b2 == b3:
            return True
        elif i == a2 + b3 and b2 == a3:
            return True
        elif i == b2 + a3 and a2 ==b3:
            return True
        elif i == b2 + b3 and a2 == a3:
            return True
        elif i ==a2 and a2 ==a3:#三条边相等,4种
            return True
        elif i ==a2 and a2 ==b3:
            return True
        elif i ==b2 and b2 == a3:
            return True
        elif i == b2 and b2 == b3:
            return True

for i in range(t):
    s = list(map(int,input().split()))
    ans = 8#因为边数有3这种情况,4(完美,有两边加起来等于另一边,另一边刚刚好相等,6(有两边加起来等于另一边,8(每个边都不等,任意两边加起来也不等第三边,
    a1,b1,a2,b2,a3,b3 = s[0],s[1],s[2],s[3],s[4],s[5]
    for i in range(0,2):
        for j in range(2,4):
            for k in range(4,6):
                x1,x2,x3 = s[i],s[j],s[k]
                if check6(x1,x2,x3):
                    ans = min(6,ans)
                if check4(a1,b1,a2,b2,a3,b3):
                    ans = min(4,ans)
                if check4(a2,b2,a1,b1,a3,b3):
                    ans = min(4,ans)
                if check4(a3,b3,a1,b1,a2,b2):
                    ans = min(4,ans)
    print(ans)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值