UVA1587 UVALive3214 POJ2160 Box

Regionals 2004 >> Europe - Northeastern

问题链接:UVA1587 UVALive3214 POJ2160 Box

问题简述:给出六组整数,问能否构成六面体。

这个题用C语言做的毫无技术含量,也许用C++来写会好一些。


AC的C语言程序如下:

/* UVA1587 UVALive3214 POJ2160 Box */

#include <stdio.h>

#define MAXN 6

struct {
    int w, h;
    int count;
} a[MAXN];
int acount;

void swap(int n)
{
    if(a[n].w > a[n].h) {
        int temp = a[n].w;
        a[n].w = a[n].h;
        a[n].h = temp;
    }
}

int checkok()
{
    if(a[0].w == a[1].w && a[0].h == a[2].w && a[1].h == a[2].h)
        return 1;
    else if(a[0].w == a[1].w && a[0].h == a[2].h && a[1].h == a[2].w)
        return 1;
    else if(a[0].w == a[1].h && a[0].h == a[2].w && a[1].w == a[2].h)
        return 1;
    else if(a[0].w == a[1].h && a[0].h == a[2].h && a[1].w == a[2].w)
        return 1;
    else if(a[0].h == a[1].w && a[0].w == a[2].w && a[1].h == a[2].h)
        return 1;
    else if(a[0].h == a[1].w && a[0].w == a[2].h && a[1].h == a[2].w)
        return 1;
    else if(a[0].h == a[1].h && a[0].w == a[2].w && a[1].w == a[2].h)
        return 1;
    else if(a[0].h == a[1].h && a[0].w == a[2].h && a[1].w == a[2].w)
        return 1;
    else
        return 0;
}

int main(void)
{
    int i, j;

    while(scanf("%d%d", &a[0].w, &a[0].h) != EOF) {
        a[0].count = 1;
        swap(0);

        acount = 1;
        for(i=1; i<MAXN; i++) {
            scanf("%d%d", &a[acount].w, &a[acount].h);
            a[acount].count = 1;
            swap(acount);

            /* 去重复 */
            for(j=0; j<acount; j++)
                if(a[j].w == a[acount].w && a[j].h == a[acount].h && a[j].count != 2) {
                    a[j].count++;
                    acount--;
                    break;
                }
            acount++;
        }

        if(acount != 3)
            printf("IMPOSSIBLE
");
        else if(checkok())
            printf("POSSIBLE
");
        else
            printf("IMPOSSIBLE
");
    }

    return 0;
}


原文地址:https://www.cnblogs.com/tigerisland/p/7564512.html