题目:
给出6个矩形及他们的长和宽,判断可否用他们拼出一个长方体(Box) 题目点这里
怎么说呢,这道题确实卡了我很久,但说难吧确实不是太难,说不难吧…反正一屏WA给跪了…
思路:
我简单对比了一下,下面的方法比较好理解也比较好实现的:
- 首先判断6×2 = 12 条边总共有几种(即去重)
- 仅1种则为正方体,ok
- 若2种则我们的理想为有一对面为正方形的长方体
- 若3种则每种在4个面出现4次(3×4 == 12)
奉AC代码:
//#include "stdafx.h"
#include <iostream>
using namespace std;
int main() {
int a[6][2];
int i, j, u;
int z;//正方形数量 max(6)
while (cin>>a[0][0]>>a[0][1]) {
if (a[0][0] == a[0][1]) z = 1; else z = 0;
for (i = 1; i < 6; i++) {
cin >> a[i][0] >> a[i][1];
if (a[i][0] == a[i][1]) z++;
}
int ks = 0, k[12] = {0};//不等长边数max(12) 及长度
for (i = 0; i < 6; i++)
for (j = 0; j < 2; j++) {
for (u = 0; u < ks;u++) if (a[i][j] == k[u]) break;
if (u == ks) { k[ks++] = a[i][j]; }
}
bool ok = false;
if (ks == 1) ok = true;//正方体
if (ks == 2 && z == 2) ok = true;
if (ks == 3) {
for (u = 0; u < 3; u++) {
int t = 0;
for (i = 0; i < 6; i++)
if (k[u] == a[i][0] || k[u] == a[i][1]) t++;
if (t != 4) break;
}
if (u == 3) ok = true;
}
cout << (ok ? "" : "IM") << "POSSIBLE\n";
}
return 0;
}
来源:CSDN
作者:Jungle_st
链接:https://blog.csdn.net/Jungle_st/article/details/104357729