盒子(uva-1587)

【题意】

            给定6个矩形的长和宽,判断他们能否构成长方形的6个面。

【分析】

           理解题意不难发现要判断能否构成长方形就是要判断性对的两个面长和宽是否相等,要实现这个判断最简单的方式是将每一组输入数据排序,然后判断如果相邻的两组数据如果相等变满足条件,还有要考虑到数据如何存储才能实现这样的判断,那就是定义一个结构体类型的数组,数据成员为每一组长和宽,这样便能很容易的满足后面的判断。

代码如下:

#include 
#include
#include
using namespace std;
const int N = 6;

struct rec      //定义一个结构体类型的数组,记录每一组输入的长和宽
{
    int l, w;
} r[N];
bool cmp(rec a, rec b)
{
    return a.w < b.w || (a.w == b.w && a.l < b.l);
}

int main()
{
    while(~scanf("%d%d", &r[0].w, &r[0].l))
    {
        int flag = 1;
        if(r[0].w > r[0].l) swap(r[0].w, r[0].l);//调整每次输入的长和宽
        for(int i = 1; i < 6; ++i)
        {
            scanf("%d%d", &r[i].w, &r[i].l);
            if(r[i].w > r[i].l) swap(r[i].w, r[i].l);
        }

        sort(r, r + N, cmp);//对输入的每一组数据进行排序,第一二,三四,五六组数据如果相同,组可以构成长方体
        for(int i = 0; i < N; i += 2)
            if(r[i].w != r[i + 1].w || r[i].l != r[i + 1].l) flag = 0;
        if(r[0].w != r[2].w || r[0].l != r[4].w || r[2].l != r[4].l) flag = 0;

        printf(flag ? "POSSIBLE" : "IMPOSSIBLE");
    }
    return 0;
}
哪里有问题欢迎随时提问!


你可能感兴趣的:(暑期训练)