《算法竞赛入门经典》 习题3-10 盒子

《算法竞赛入门经典》 习题3-10 盒子

给定6个矩形的长和宽wi和hi(1<=wi,hi<=1000),判断它们能否构成长方体的6个面。

#include<stdio.h>
#include<algorithm> //调用swap,sort函数 
using namespace std;
typedef struct   //定义关于宽高的结构体 
{
	int w,h;
}box;
bool cmp(box a,box b) //定义了cmp,用于比大小排序 
{
	return a.w<b.w||(a.w==b.w&&a.h<b.h);
}
int main()
{
	box b[6];
	while(scanf("%d %d",&b[0].w,&b[0].h)!=EOF) //输入第一组宽高 
	{
		if(b[0].w>b[0].h) //如果宽大于高,交换,便于后续6组进行排序 
		    swap(b[0].w,b[0].h);
		int flag=1;
	    for(int i=1;i<=5;i++)  //输入剩下5组 
	    {
	    	scanf("%d %d",&b[i].w,&b[i].h);
	    	if(b[i].w>b[i].h)
		        swap(b[i].w,b[i].h);
		}
		sort(b,b+6,cmp); //6组进行字典序排序 
		for(int i=0;i<5;i+=2)
		{
			if(b[i].w!=b[i+1].w||b[i].h!=b[i+1].h) //排序后,一定要有两组数字一样,不然不能构成长方体 
			{
				flag=0;
				break;
			}
		}
		if(b[0].w!=b[2].w||b[0].h!=b[4].w||b[2].h!=b[4].h) //举个例子就知道了,比如2 3,2 3,2 4,2 4,3 4,3 4 
		flag=0;
		printf(flag?"POSSIBLE\n":"IMPOSSIBLE\n");
	}
	return 0; 
}

(我写的好麻烦啊,嗯……就是举几个例子,排一排)
(ヘアピンを買った)

猜你喜欢

转载自blog.csdn.net/weixin_43326028/article/details/83714140
今日推荐