题目描述#
给你三个矩形,你可以将其拼接在一起,但是不重叠,请问是否能产生一个正方形?
输入格式#
第一行是一个整数T (1≤T≤1000),表示样例的个数。
以后每个样例占三行,每行是两个整数a,b (1≤a,b≤106),表示一个矩形的长和宽。
输出格式#
依次每行输出一个样例的结果,如果可以组成,输出”Yes”,否则输出”No”。
样例输入#
2 1 1 1 2 1 3 1 4 1 4 2 4
样例输出#
No Yes
解析#
三个矩形组成一个正方形只有一下两种情况:
#include<stdio.h>
typedef struct {
int a,b;
}juzheng;
//a边比b边大
int main()
{
int T,i,t,max,cnt,maxsqure;
juzheng squre[5];
scanf("%d",&T);
while(T--){
max=0;
cnt=0;
for(i=0;i<3;i++){
scanf("%d%d",&squre[i].a,&squre[i].b);
if(squre[i].a<squre[i].b){
t=squre[i].a;
squre[i].a=squre[i].b;
squre[i].b=t;
}
if(max==squre[i].a){
cnt++;
}else if(max<squre[i].a){
max=squre[i].a;
cnt=1;
maxsqure=i;
}
}
if(cnt>1){
int sum=0;
for(i=0;i<3;i++){
sum+=squre[i].b;
}
if(sum==max) printf("Yes\n");
else printf("No\n");
}else{
int flag=0;
for(i=0;i<3;i++){
if(i!=maxsqure) {//如果不是最大边矩形的话
if(squre[i].a+squre[maxsqure].b==max){//如果这个矩形的边加最大矩形的边等于正方形边长的话
if(squre[3-maxsqure-i].a==squre[i].a){//如果对应边相等的话
if(squre[3-maxsqure-i].b+squre[i].b==max){
printf("Yes\n");
}
}else if(squre[3-maxsqure-i].b==squre[i].a){
if(squre[3-maxsqure-i].a+squre[i].b==max){
printf("Yes\n");
}
}else{
printf("No\n");
}
}else if(squre[i].b+squre[maxsqure].b==max){//如果这个矩形的边加最大矩形的边等于正方形边长的话
if(squre[3-maxsqure-i].a==squre[i].b){//如果对应边相等的话
if(squre[3-maxsqure-i].b+squre[i].a==max){
printf("Yes\n");
}
}else if(squre[3-maxsqure-i].b==squre[i].b){
if(squre[3-maxsqure-i].a+squre[i].a==max){
printf("Yes\n");
}
}else{
printf("No\n");
}
}else{
printf("No\n");
}
break;
}
}
}
}
return 0;
}