2018-10-29-17:30:17

原题链接

题目描述:

  给定6个矩形的长和宽,判断它们是否能够构成长方体的6个面。

本题思路:

  将输入的数据保存在数组内(建议使用结构体数组),每次输入的时候将较大的数字放在前面,输入完毕之后对整个结构体进行排序,接着只需按照顺序比对相应成员是否相等即可,接着检查长和宽和高是否对应相等即可。

本题注意点:

  输入时排序可以逆序也可以顺序排,最后对结构体排序也可以顺序或者逆序排,但是切记排序的时候要将长方形的长和宽都考虑进去。

AC代码:

 1 #include <cstdio>
 2 #include <cstring>
 3 #include <algorithm>
 4 #include <iostream>
 5 using namespace std;
 6 #define count 6
 7 struct rectengle{
 8     int length,width;
 9 }cube[count];
10 bool cmp(const rectengle a,const rectengle b){
11     return a.length==b.length? a.width>b.width : a.length>b.length;
12 }
13
14 int main()
15 {
16     while(cin>>cube[0].length>>cube[0].width){
17         bool flag=true;
18         if(cube[0].length<cube[0].width)    swap(cube[0].length,cube[0].width);
19         for(int i=1;i<count;i++){
20             cin>>cube[i].length>>cube[i].width;
21             if(cube[i].length<cube[i].width)    swap(cube[i].length,cube[i].width);
22         }
23         sort(cube,cube+count,cmp);
24         if(memcmp(cube,cube+1,sizeof(rectengle))||memcmp(cube+2,cube+3,sizeof(rectengle))||memcmp(cube+4,cube+5,sizeof(rectengle)))
25             flag=false;
26         if(cube[0].length!=cube[2].length||cube[2].width!=cube[4].width||cube[0].width!=cube[4].length)
27             flag=false;
28         flag?cout<<"POSSIBLE"<<endl:cout<<"IMPOSSIBLE";
29     }
30     return 0;
31 }

本题应熟记知识点:

<1>:sort函数:

  头文件:#include <algorithm>

  实现原理:sort并不是简单的快速排序,它对普通的快速排序进行了优化,此外,它还结合了插入排序和推排序。系统会根据你的数据形式和数据量自动选择合适的排序方法,这并不是说它每次排序只选择一种方法,它是在一次完整排序中不同的情况选用不同方法,比如给一个数据量较大的数组排序,开始采用快速排序,分段递归,分段之后每一段的数据量达到一个较小值后它就不继续往下递归,而是选择插入排序,如果递归的太深,他会选择堆排序。

  具体函数实现请参考:http://www.cnblogs.com/fengcc/p/5256337.html

  本题中利用sort函数对结构体进行排序,参数包含三个,第一个参数是要排序的数组的起始地址,第二个参数是结束的地址(最后一位要排序的地址的下一地址),第三个参数是排序的方法,可以是从大到小也可是从小到大,还可以不写第三个参数,此时默认的排序方法是从小到大排序。

  如果想要从大到小排序,只需在函数第三个函数中写入下面这个函数即可。

1 bool compare(int a,int b)
2 {
3 return a>b;
4 }

  sort函数还可以实现更广泛的功能,例如本题中遇到的,如果长方形的长相等就对宽进行排序。

<2>:memcmp函数:

  头文件:#include<cstring>

  函数原型:int memcmp(const void *buf1, const void *buf2, unsigned int count);

  函数功能:比较内存区域buf1和buf2的前count个字节

当buf1<buf2时,返回值小于0;
当buf1==buf2时,返回值=0;
当buf1>buf2时,返回值大于0。

转载于:https://www.cnblogs.com/bianjunting/p/9871881.html

UVA1587-Box相关推荐

  1. UVa1587 - Box

    //UVa1587 - Box //题目:给出6个矩形的长和宽,判断它们能否构成长方体的六个面 //6/3=2 个相同的面 WA,no more data in #include <stdio. ...

  2. UVa1587 Box(排序)

    题意:给出6个矩形的长和宽,问是否可以构成一个长方体. 思路:长方体的长宽高分别为a,b,c,假设a < b < c,6个矩形分别为ab,ab,ac,ac,bc,bc 代码如下: #inc ...

  3. 算法竞赛入门经典(第二版) | 习题3-10 盒子 (pair结构体)(UVa1587,Box)

    大意: 给定6个矩形的长和宽,判断他们能否构成一个长方体. 题目(提交)链接→UVa-1587 没使用过该网站的同学请猛戳这里→vJudge教程 储备知识: pair结构体: pair是将2个数据组合 ...

  4. UVA1587 Box

    题意:给定6个矩形的长和宽wi和hi(1<=wi,hi<=1000),判断它们能否构成长方体的六个面. 思路:一个矩形的六个面中,每两个对立面是相同的,相当于由三个不同的面复制而成,而这三 ...

  5. [刷题]算法竞赛入门经典 3-10/UVa1587 3-11/UVa1588

    书上具体所有题目:http://pan.baidu.com/s/1hssH0KO 题目:算法竞赛入门经典 3-10/UVa1587:Box 代码: //UVa1587 - Box #include&l ...

  6. 《算法竞赛入门经典(第2版)》——学习记录

    前言:   这里主要记录本人在学习紫书过程中充分理解过的题目的AC代码,便于以后回顾时查找代码和思路,毕竟看别人的真的有点难懂.此外,本书甚至是本书之外的相关知识学习也可能在此留下记录.   作为一只 ...

  7. UVA1587 盒子 Box 题解

    题意翻译 给定6个矩形的长和宽wi和hi(1<=wi,hi<=10000),判断它们能否构成长方体的六个面. 输入输出样例 Sample Input 1345 2584 2584 683 ...

  8. UVA1587 盒子 Box

    用的最笨的暴力的方法,看了以前写的代码比较短但是也没有心思去搞明白怎么回事了 #include <bits/stdc++.h>#define fi first #define se sec ...

  9. 远程控制virtual box虚拟机系统的三种方式

    远程控制virtual box虚拟机系统的三种方式[阅读时间:5分钟] 1.使用现有的远程控制软件 2.使用SSH连接 3.使用远程桌面控制虚拟机系统 对于把虚拟机安装在寝室笔记本的人来说,能够远程控 ...

  10. ICE BOX 配置,使用----第一篇

    一 理论部分 (1) 为什么要使用icebox? icebox server代替了通常的server. icebox是为了方便集中管理多个ice服务而建立的. 它通过使用icebox服务器,把ice服 ...

最新文章

  1. java openjdk 卸载_java – 如何卸载OpenJDK?
  2. C++(三)——类和对象(上)
  3. VPGAME 的 Kubernetes 迁移实践
  4. Objective-C:OC内部可变对象和不可变对象的深(复制)拷贝问题思考:
  5. 保留小数点位数和格式
  6. MATLAB基础教程(10)——二维中的数据可视化
  7. canal DevGuide
  8. hdu1251(trie树)
  9. SP2-0750: You may need to set ORACLE_HOME to your Oracle software directory
  10. 51nod1417 天堂里的游戏
  11. python自动化,自动登录并且添加一个门店
  12. 后期强ps画意大师完美破解版一键打造中国风
  13. Python.暴力破解rar密码
  14. OSI七层协议的简介
  15. Windows Hook案例分析与技术探索
  16. Asp 操作Access数据库时出现死锁.ldb的解决方法
  17. Stata | 字符函数
  18. PyQt5实时汇率查询
  19. AD8255手电筒芯片 双路LED控制芯片 支持多种模式 外围简单
  20. 古典密码----仿射密码加解密

热门文章

  1. Notepad++快捷键使用技巧
  2. 安装华为T2000软件,无法初始化MS SQL 2000问题解决办法
  3. 支付宝支付 第十集:支付回调
  4. c# 计算点到线段的距离
  5. 三角形css_纯 CSS 实现绘制各种三角形(各种角度)
  6. 修改js文件需要重启服务器,关于Node.js中频繁修改代码重启服务器的问题
  7. 点云数据的类型主要分为_点云学习在自动驾驶中的研究概述
  8. 网线传输速度测试_高效的以太网测试仪应该具备哪些功能?
  9. php 获取对象中的元素个数组长度,php数组长度怎么获取
  10. QtCreater的安装路径