大概题意:
给出六个面判断这六个面是否能构成长方体
输入:
每个面的长宽
输出:
POSSIBLE或IMPOSSIBLE
我的基本思路是先排序后根据条件判断。
假设三个数a>b>c,如果这三个数能构成一个长方体,那么排序后这三个数所组成的六个面以此应该是:
ab ab ac ac bc bc
这样再根据构成长方体的条件(a,b,c所对应位置值相等)判断即可。
以下是我AC的代码(有点长,哈哈哈)
#include
void swap(int *a,int *b)
{
int t;
t=*a;
*a=*b;
*b=t;
}
int main()
{
int a[6],b[6],flag,i,j;
while(scanf("%d%d",&a[0],&b[0])!=EOF)
{
if(a[0]>b[0])
swap(&a[0],&b[0]);
for(i=1;i<=5;i++)
{
scanf("%d%d",&a[i],&b[i]);
if(a[i]>b[i])
swap(&a[i],&b[i]);
}
//到这儿每个面的长宽都是宽在前
flag=1;
///按照ab ab ac ac bc bc 排序
for(i=0;i<6;i++)
{
for(j=i;j<6;j++)
{
if(a[i]>a[j])
{
swap(&a[i],&a[j]);
swap(&b[i],&b[j]);
}
else if(a[i]==a[j]&&b[i]>b[j])
{
swap(&b[i],&b[j]);
}
}
}
//
//判断是否为三个完全一样的对面
for(i=0;i<6;i+=2)
{
if(a[i]!=a[i+1]||b[i]!=b[i+1])
{
flag=0;
break;
}
}
if(flag)
{
if(a[0]!=a[2]||a[4]!=b[0]||b[2]!=b[4])//判断对应位置的值是否相等
flag=0;
}
if(flag)
printf("POSSIBLE\n");
else
printf("IMPOSSIBLE\n");
}
return 0;
}
最后总结下我所犯的错误
这道题个人认为重点是在排序。为了交换方便我就采用了交换函数,开始未用指针就不能将值传回主函数。
以上仅供参考