UVA 1587 Box 思维

该博客主要介绍了UVA 1587题目的解题思路。给定六个矩形的边长,需要判断它们是否能组合成一个长方体。通过分析长方体的边长特性,即长方体的每个面由相同的两对边组成,可以对输入矩形进行排序和匹配,如果存在三组相等的边长,则可能构成长方体。博主提供了满足条件的AC代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题意:

给出两条边长确认一个矩形,给出六个矩形,请问这六个矩形能不能组成一个长方体。

做法:

对于一个长方体,设其边长为a,b,c,令a<b<c,排序完成后,则有,ab,ab,ac,ac,bc,bc,即只有这样的数据才能构成长方体。

则可以这样考虑,声明一个结构体,含有宽(w)和高(h),对于输入的数据,若后项大于前项,则交换,排序后,首先寻找是否刚好有三组一样的矩形。如果有,则这样考虑,第一个的w与第三个的w一样,第三个的h与第五个的h一样,第一个的h与第五个的w一样,只有这样子,才满足矩形,否则不满足。

AC代码:

#include <iostream>
#include <algorithm>
using namespace std;
struct rec
{
	int w, h;
};
rec a[6];
bool cmp(const rec &a, const rec &b)
{
	return a.w == b.w ? a.h < b.h : a.w < b.w;
}
bool check()
{
	if (a[0].w != a[1].w||a[0].h != a[1].h)
		return false;
	if (a[2].w != a[3].w||a[2].h != a[3].h)
		return false;
	if (a[4].w != a[5].w||a[4].h != a[5].h)
		return false;
	if (a[0].h != a[2].h||a[0].w != a[4].h||a[2].w != a[4].w)
		return false;
	return true;
}
int main()
{
	while (cin>>a[0].w>>a[0].h)
	{
		if (a[0].w < a[0].h)
			swap(a[0].w, a[0].h);
		for (int i = 0; i < 5; ++i)
		{
			
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值