UVa1587 - Box

题目

UVa1587

题目意思大致为每次输入六个矩形的长和宽,然后这六个矩形能否构成一个长方体(或正方体)

解读

如果一组数据能构成长方体,则这六个面符合规则:

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;
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容