这个题题意就是判断6个面能否组成一个长方体。
我的思路是:
1、将数据以结构体形式存储,然后按照大小顺序排列整齐,便于写判断。
2、判断六个面是否俩俩相等。
3、判断其中3个面能否接在一起。
AC代码:
#include <stdio.h> #include <stdlib.h> struct pallet { int w,h; }; int is_samestruct(struct pallet a,struct pallet b) { if (a.w==b.w&&a.h==b.h) return 1; else return 0; } int main() { struct pallet p[6],temp; int i,j,t; while(scanf("%d%d",&p[0].w,&p[0].h)!=EOF) { if (p[0].w<p[0].h) { t=p[0].w; p[0].w=p[0].h; p[0].h=t; } for (i=1;i<6;i++) { scanf("%d%d",&p[i].w,&p[i].h); if (p[i].w<p[i].h) { t=p[i].w; p[i].w=p[i].h; p[i].h=t; } } for (i=1;i<=6-1;i++) for (j=0;j<6-i;j++) if (p[j].w<p[j+1].w) { temp=p[j]; p[j]=p[j+1]; p[j+1]=temp; } for (i=1;i<=6-1;i++) for (j=0;j<6-i;j++) if (p[j].h<p[j+1].h&&p[j].w==p[j+1].w) { temp=p[j]; p[j]=p[j+1]; p[j+1]=temp; } for (i=0;i<6;i+=2) if (!is_samestruct(p[i],p[i+1])) break; if (i==6) { if (p[0].w==p[2].w) { if ((p[4].w==p[0].h&&p[4].h==p[2].h)||(p[4].w==p[2].h&&p[4].h==p[0].h)) printf("POSSIBLE\n"); else printf("IMPOSSIBLE\n"); } else printf("IMPOSSIBLE\n"); } else printf("IMPOSSIBLE\n"); } return 0; }