本文共 3328 字,大约阅读时间需要 11 分钟。
第一次看到这个题时,我自己也没想出什么好的办法,当时在网上看了答案,太菜了也没看懂答案什么意思,过了好久现在又看这个题,想出了自己的办法。
代码如下:#include#include typedef struct BOX{ int w; int h; int wn; int hn;}BOX;int main(){ BOX box[6]; int i,j; while(scanf("%d%d%",&box[0].w,&box[0].h)!=EOF) { int sw=0,sh=0,tw,th,sw1=0,sh1=0; for(i=1;i<6;i++) scanf("%d%d",&box[i].w,&box[i].h); for(i=0;i<6;i++) { box[i].wn=0; box[i].hn=0; } for(i=0;i<5;i++) for(j=i+1;j<6;j++) { if(box[i].h==box[j].w) { box[i].hn++; box[j].wn++; } if(box[i].h==box[j].h) { box[i].hn++; box[j].hn++; } if(box[i].w==box[j].h) { box[i].wn++; box[j].hn++; } if(box[i].w==box[j].w) { box[i].wn++; box[j].wn++; } } int flag=0; for(i=0;i<6;i++) { if(!(box[i].wn%3==0||box[i].wn==7||box[i].wn==10)) { flag=1; break; } if(!(box[i].hn%3==0||box[i].hn==7||box[i].hn==10)) { flag=1; break; } if(box[i].hn==0) { flag=1; break; } if(box[i].wn==0) { flag=1; break; } } if(flag==0) printf("POSSIBLE\n"); else printf("IMPOSSIBLE\n"); } return 0;}
其实很好理解,判断能否构成正方体,无非就是以下几种情况:
1、边长的情况有三种,是一个标准的长方体,那么六条边都有另外三条边与之相等;2、边长的情况有两种,那么每条边对应的相等的情况就有两种情况,分别是有三个或者是七个变与之相等;
3、边长的情况只有一种,那么此时每条边都是有十条边与之相等。
注意:此时我说的相等等情况都是除去与他成对出现的那条边,
其实如果不好理解的话,可以把这几种情况都列举出来,在逐一排除其他特殊情况,还是都写出来比较好理解。 下面我们看一下其他人的做法 法一:#include#include using namespace std; struct mian{ int c; int k; }p[10]; bool so(mian a,mian b){ if(a.c!=b.c) return a.c>b.c; return a.k>b.k; } bool operator ==(mian a,mian b){ if(a.c==b.c && a.k==b.k) return true; return false; } int main(){ int a,b; while(~scanf("%d %d",&a,&b)){ int x=max(a,b); int y=min(a,b); p[0].c=x; p[0].k=y; for(int i=1;i<6;i++){ scanf("%d %d",&a,&b); x=max(a,b); y=min(a,b); p[i].c=x,p[i].k=y; } sort(p,p+6,so); if(p[0]==p[1] && p[3]==p[2] && p[4]==p[5] && p[0].c==p[3].c && ((p[5].c==p[0].k && p[2].k==p[4].k)|| (p[5].c==p[3].k && p[0].k==p[5].k))) printf("POSSIBLE\n"); else printf("IMPOSSIBLE\n"); } return 0; }
分析:
定义一个mian的结构体{ int 长; int 宽; }; 输入的时候严格按照长大于宽输入 然后sort 长相等的时候按宽排序 这样三对面就排在一起了 然后判断 即: 如果要构成一个长方体的话,有3对面是一样的 先判断这个成立了,再判断能否构成长方体 假设现在剩下的面就为2 3 (第一个面)
3 4 (第二个面)
4 2 (第三个面)
发现是首尾相接的,即为只需要判断三次,第一个面的长或者宽或者两者都在第二个面出现,第一个面的长或者宽或者两者都在第三个面出现,第二个面的长或者宽或者两者都在第三个面出现,如果三个条件都满足的话,就构成了
转载地址:http://sugsi.baihongyu.com/