题目链接 : https://vjudge.net/problem/UVA-1587
题目思路 :先找出两个相对的面,找出三组面,判断其中两组面不相同的两条边是否与另一组面相同;
1 #include<stdio.h> 2 int a[6],b[6]; 3 int main() 4 { 5 while(scanf("%d %d",&a[0],&b[0])!=EOF) 6 { 7 int p = 1,c[6]={-1,-1,-1}; 8 if(a[0]<b[0]) //将输入的数据按大小排好 9 { 10 int t; 11 t = a[0]; 12 a[0] = b[0]; 13 b[0] = t; 14 } 15 for(int i = 1;i < 6;i++) 16 { 17 scanf("%d %d",&a[i],&b[i]); 18 if(a[i]<b[i]) 19 { 20 int t; 21 t = a[i]; 22 a[i] = b[i]; 23 b[i] = t; 24 } 25 } 26 int k = 0,d[6],e[6]; 27 for(int i = 0;i < 6;i++ ) 28 { 29 if(i==c[0]||i==c[1]||i==c[2]) 30 continue; 31 for(int j = i+1;j < 6;j++ ) 32 { 33 if(a[i]==a[j]&&b[i]==b[j]) 34 { 35 d[k] = a[i]; 36 e[k] = b[i]; 37 c[k] = j; 38 k++; 39 break; 40 } 41 } 42 } 43 if(c[0]==-1||c[1]==-1||c[2]==-1) //是否存在3组相同的面 44 { 45 printf("IMPOSSIBLE "); 46 continue; 47 } 48 p = 0; 49 if(d[0] == d[1]) //判断另两边是否与另一组面相同 50 { 51 if(e[0] == d[2]&&e[1]==e[2]||e[0]==e[2]&&e[1]==d[2]) 52 p = 1; 53 } 54 if(d[0]==e[1]) 55 { 56 if(e[0] == d[2]&&d[1]==e[2]||e[0]==e[2]&&d[1]==d[2]) 57 p = 1; 58 } 59 if(e[0]==d[1]) 60 { 61 if(d[0] == d[2]&&e[1]==e[2]||d[0]==e[2]&&e[1]==d[2]) 62 p = 1; 63 } 64 65 if(e[0]==e[1]) 66 { 67 if(d[0] == d[2]&&d[1]==e[2]||d[0]==e[2]&&d[1]==d[2]) 68 p = 1; 69 } 70 if(p==1) 71 printf("POSSIBLE "); 72 else 73 printf("IMPOSSIBLE "); 74 } 75 return 0; 76 }