题目
题目意思大致为每次输入六个矩形的长和宽,然后这六个矩形能否构成一个长方体(或正方体)
解读
如果一组数据能构成长方体,则这六个面符合规则:
a b
a b
a c
a c
b c
b c
其中a<=b<=c
所以把输入的数据进行排序之后很容易就能进行判断,即一二组,三四组,五六组分别相等,且一三组的x相同,三五组的y相同,一组的y与五组的x相同。
代码
#include <stdio.h>
struct pallet {
int x; int y;
}pallets[6];
void swap(int *a, int *b) {
int t = *a; *a = *b; *b = t;
};
void sort() {
for (int i = 5; i >= 0; i--) {
for (int j = 0; j < i; j++) {
if (pallets[j].x > pallets[j + 1].x) {
swap(&pallets[j].x, &pallets[j + 1].x); swap(&pallets[j].y, &pallets[j+1].y);
}
else if (pallets[j].x == pallets[j + 1].x && pallets[j].y > pallets[j + 1].y) {
swap(&pallets[j].x, &pallets[j + 1].x); swap(&pallets[j].y, &pallets[j + 1].y);
}
}
}
}
int check() {
if (pallets[0].x == pallets[1].x && pallets[0].y == pallets[1].y &&
pallets[2].x == pallets[3].x && pallets[2].y == pallets[3].y &&
pallets[4].x == pallets[5].x && pallets[4].y == pallets[5].y &&
pallets[0].x == pallets[2].x && pallets[2].y == pallets[4].y &&
pallets[0].y == pallets[4].x)
return 1;
return 0;
}
int main() {
while (scanf("%d%d", &pallets[0].x, &pallets[0].y) == 2) {
if (pallets[0].x > pallets[0].y)
swap(&pallets[0].x, &pallets[0].y);
for (int i = 1; i < 6; i++) {
scanf("%d%d", &pallets[i].x, &pallets[i].y);
if (pallets[i].x > pallets[i].y)
swap(&pallets[i].x, &pallets[i].y);
}
sort();
if (check())
printf("POSSIBLE\n");
else
printf("IMPOSSIBLE\n");
}
return 0;
}