![](https://i-blog.csdnimg.cn/blog_migrate/049528c111a232e5a406d0b81b51d499.png)
解题思路:
思考可能出现的情况:
1.四边形(最少边数)
a.有两个矩形边的和等于另一个矩形的边且这两个矩形的另一边相等
![](https://i-blog.csdnimg.cn/blog_migrate/e0373e016911ff96b834e4ad0a5d4f62.jpeg)
b.三个矩形都有一条边相等,也为四边形
![](https://i-blog.csdnimg.cn/blog_migrate/3b6c74e9eadac409a05dc7fad2b9c9ed.jpeg)
2.六边形
a.只要有两个矩形的和等于第三个矩形的一边,则最少为六边形(先不讨论一定为六边形的情况)
![](https://i-blog.csdnimg.cn/blog_migrate/74feff29eb6843004387b07e9d8261fb.jpeg)
3.最多为八边形
排除法:既不为四边形也不为六边形就为八边形(排除法)
总情况:
![](https://i-blog.csdnimg.cn/blog_migrate/f8d98196628b12e648c12d47b98d240d.jpeg)
代码解答:
def check1(x, y, z): # 四边形判断
if x >= y and x >= z:
if y + z == x and m[2] + m[3] - y == m[4] + m[5] - z: #取另一条边的方法
return True
elif y >= x and y >= z:
if x + z == y and m[0] + m[1] - x == m[4] + m[5] - z:
return True
elif z >= x and z >= y:
if x + y == z and m[0] + m[1] - x == m[2] + m[3] - y:
return True
else:
return False
def check2(x, y, z): #最少为六边形判断
if x >= y and x >= z:
if y + z == x:
return True
elif y >= x and y >= z:
if x + z == y:
return True
elif z >= x and z >= y:
if x + y == z:
return True
else:
return False
n = int(input())
for i in range(n):
m =list(map(int, input().split())) #map遍历
ans = 8 #最大的边
for j in range(2): #j:0,1
for u in range(2,4): #u:2,3
for k in range(4,6): #4,5
x, y, z = m[j], m[u], m[k] #遍历重复赋值
if check1(x, y, z): #多种情况进行判断,取最小边数
ans = min(ans, 4)
if x == y == z and m[0] + m[1] - x == m[2] + m[3] - y == m[4] + m[5] - z:
ans = min(ans,4)
if check2(x, y, z):
ans = min(ans, 6)
if x == y or x == z or z == y:
ans = min(ans, 6)
print(ans)
结果:
![](https://i-blog.csdnimg.cn/blog_migrate/043e029a20c4b30f7208075f38f86b01.png)