题目:给定6对整数,分别代表一个矩形的边长,判断是否能构成一个长方体。
思路:看似简单,但要找对方法,否则还是很麻烦的。输入的12个数,没有什么规律可言,为了判断方便,可以先进行标准化处理。
关键是数的关系,所以可以创建一个square结构体,包含两个成员变量 ,分别代表矩形的较短边和较长边,这样,就变成了6个矩形,然后对矩形进行排序,如何定义大小关系呢?先比较短边,再比较长边。
代码
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
struct square{
int a,b;
square(int xa=0,int xb=0){
if(xa<xb){a=xa;b=xb;}
else{a=xb;b=xa;}
}
bool operator==(const square &sb) const{
return (a==sb.a&&b==sb.b);
}
bool operator < (const square &sb)const {
return a==sb.a?b<sb.b:a<sb.a;
}
} s[6];
int reads(){
int a,b;
for(int i=0;i<6;++i){
if(scanf("%d%d",&a,&b)!=2) return 0;
s[i]=square(a,b);
}
return 1;
}
bool check(){
sort(s,s+6);
for(int i=0;i<6;i+=2) if(!(s[i]==s[i+1])) return 0;
return(s[0].a==s[2].a&&s[0].b==s[4].a&&s[2].b==s[4].b);
}
int main(){
while(reads()){
printf("%s\n",check()?"POSSIBLE":"IMPOSSIBLE");
}
return 0;
}
疑惑:
- 重载运算符的函数必须声明为const,虽然我到现在也没搞明白是为什么
- 构造函数不是没有返回值吗,那么
s[i]=square(a,b);
为什么是对的呢?