poj-2160 BOX

这个寒假开始acm集训,有的时候觉得自己在C语言方面实在不行……像这个题做了很长时间,WA了n次,主要还是没考虑特殊数据,想当然了。


题目要求:输入六行宽和高,判断六个长方形能否组成长方体。

思路:六组数据中,每组数据先按从大到小顺序排序(长方形宽就是高,高就是宽);六组数据冒泡排序(PS:排序是整行换位),第一列从大到小,相同时比较第二列。

    事实上,设长方体的长、宽、高分别为a、b、c,a>=b&&b>=c,排序后一定会是

a b

a b

a c

a c

b c

b c

    之后就是暴力判断。。。如果有好方法请留言……


#include<stdio.h>
int sortwh(int w[6],int h[6])
{
	int i=0,k,t=0,t1=0,t2=0;
	for(i=0;i<6;i++)
	{
		if(w[i]<h[i])
		{
			t=w[i];w[i]=h[i];h[i]=t;
		}
		
	}
	for(k=1;k<=5;k++)
		for(i=0;i<6-k;i++)
	{
		if(w[i]<w[i+1]||(w[i]==w[i+1]&&h[i]<h[i+1]))
		{
			t1=w[i];w[i]=w[i+1];w[i+1]=t1;
			t2=h[i];h[i]=h[i+1];h[i+1]=t2;
		}
	}
	i=0;
	if(w[0]==w[1]&&w[1]==w[2]&&w[2]==w[3]&&w[4]==w[5]&&w[5]==h[0]&&h[0]==h[1]&&h[2]==h[3]&&h[3]==h[4]&&h[4]==h[5])
		return 1;
	else return 0;
		 
}
int main()
{
	int w1[6]={0},h1[6]={0},j,ans=0;
	while(scanf("%d %d",&w1[0],&h1[0])!=EOF)
	{
		for(j=1;j<6;j++)
			scanf("%d %d",&w1[j],&h1[j]);
		for(j=0;j<6;j++)
			if(w1[j]<=0||w1[j]>10000||h1[j]<=0||h1[j]>10000)
				return 0;
		ans=sortwh(w1,h1);
		if(ans)	printf("POSSIBLE\n");
			else printf("IMPOSSIBLE\n");
		
	}
	return 0;
} 
测试用例

1345 2584
2584 683
2584 1345
683 1345
683 1345
2584 683
POSSIBLE

1 3
1 3
1 2
1 2
1 1
1 1
IMPOSSIBLE

1 1
1 1
1 2
1 2
1 2
1 2
POSSIBLE

1 1
1 1
1 2
1 2
2 2
2 2
IMPOSSIBLE

1 1
1 1
9999 9999
9999 9999
9999 9999
9999 9999
IMPOSSIBLE

1 3
1 3
2 4
2 4
3 4
3 4
IMPOSSIBLE

1345 2584
2584 683
2584 1345
683 1345
683 683
1345 2584
IMPOSSIBLE

1 2
2 3
2 1
3 1
3 3
1 2
IMPOSSIBLE
PS:从poj的discuss中粘贴的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值