Python:每日一题之矩阵拼接

探讨使用三个不同尺寸的矩形拼接成多边形时,所能形成的边数最少的多边形类型。通过算法判断矩形是否能拼接成四边形或六边形,并给出解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题描述

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

例如用 3×2 的矩形(用 A 表示)、 4×1 的矩形 (用 B 表示) 和 2×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

 思考:

参考代码: 

import os
import sys

def check1(x1,x2,x3):    #能完全匹配,四边形
  if x1>=x2 and x1>=x3:  
    if x1==x2+x3 and a[2]+a[3]-x2==a[4]+a[5]-x3:
      return True
  if x2>=x1 and x2>=x3:
    if x2==x1+x3 and a[0]+a[1]-x1==a[4]+a[5]-x3:
      return True
  if x3>=x1 and x3>=x2:
    if x3==x1+x2 and a[0]+a[1]-x1==a[2]+a[3]-x2:
      return True
  return False

def chachk2(x1,x2,x3):  #能部分匹配,六边形
  if x1>=x2 and x1>=x3: 
    if x1==x2+x3 :
      return True
  if x2>=x1 and x2>=x3:
    if x2==x1+x3 :
      return True
  if x3>=x1 and x3>=x2:
    if x3==x1+x2 :
      return True
  return False

T=int(input())  
for t in range(T):
  a=list(map(int,input().split()))
  ans=8    #除能完全匹配和部分匹配外的为八变形
  for i in range(0,2):      # 第1个矩形横竖两种摆法
    for j in range(2,4):    # 第2个矩形横竖两种摆法
      for k in range(4,6):  # 第3个矩形横竖两种摆法
        x1,x2,x3=a[i],a[j],a[k]
        if x1==x2 and x2==x3:  #三边相等一定能拼成四边形
          ans=min(ans,4)
        if check1(x1,x2,x3):
          ans=min(ans,4)
        if x1==x2 or x2==x3 or x3==x1:
          ans=min(ans,6)
        if chachk2(x1,x2,x3):
          ans=min(ans,6)
  print(ans)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

努力的敲码工

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

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

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

打赏作者

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

抵扣说明:

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

余额充值