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; }