做了很久了,终于AC了!!! 刚开始思路出现了问题,只判断了是否有三对相等的面,一直没找到bug,后来在网上搜了12几组测试用例,发现有一组测试用例输出结果不对,这才发现了程序还有bug,没用很久就有了新思路,我的思路是在保证有三对面相等的基础上,再对长方体的三个面的边长进行限制,分8种情况, 自己知道很麻烦,但还是写出来了,当提交AC之后,太激动了! 水平还是太水, 慢慢练吧!
#include<stdio.h>
#include <string.h>
#include <ctype.h>
int main()
{
int i,j,k,r,s,t,m,n,z,x,c;
int a[10][10]={0},b[10][10]={0},d[10]={0};
while(scanf("%d %d",&a[1][1],&a[1][2]) != EOF)
{
r=0; s=2000;
for(i=2; i<=6; i++)
for(j=1; j<=2; j++)
scanf("%d",&a[i][j]);
for(i=1; i<=6; i++)
for(j=1; j<=2; j++)
b[i][j]=a[i][j];
for(i=1; i<=6; i++)
{
for(j=i+1; j<=6; j++)
{
if( (a[i][1] == a[j][1] && a[i][2] == a[j][2] ) || ( a[i][1] == a[j][2] && a[i][2] == a[j][1] ) )
{
a[i][1]=a[j][1]=a[i][2]=a[j][2]=s; s++;
d[++r]=i;
break;
}
}
}
z=d[1]; x=d[2]; c=d[3];
if ( b[z][1]==b[c][2] && b[z][2] == b[x][1] && b[x][2]== b[c][1] && r==3 )
printf("POSSIBLE\n");
else if ( b[z][1] == b [c][1] && b[z][2] == b[x][1] && b[x][2] == b[c][2] && r==3 )
printf("POSSIBLE\n");
else if ( b[z][1] == b [c][2] && b[z][2] == b[x][2] && b[x][1] == b[c][1]&&r==3 )
printf("POSSIBLE\n");
else if ( b[z][1] == b [c][1] && b[z][2] == b[x][2] && b[x][1] == b[c][2] &&r==3 )
printf("POSSIBLE\n");
else if ( b[z][1] == b [x][1] && b[z][2] == b[c][2] && b[x][2] == b[c][1] &&r==3 )
printf("POSSIBLE\n");
else if ( b[z][1] == b [x][1] && b[z][2] == b[c][1] && b[x][2] == b[c][2] &&r==3 )
printf("POSSIBLE\n");
else if ( b[z][1] == b [x][2] && b[z][2] == b[c][2] && b[x][1] == b[c][1]&&r==3 )
printf("POSSIBLE\n");
else if ( b[z][1] == b [x][2] && b[z][2] == b[c][1] && b[x][1] == b[c][2] &&r==3 )
printf("POSSIBLE\n");
else
printf("IMPOSSIBLE\n");
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
memset(d,0,sizeof(d));
}
return 0;
}