UVA1587-Box
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个字节
转载于:https://www.cnblogs.com/bianjunting/p/9871881.html
UVA1587-Box相关推荐
- UVa1587 - Box
//UVa1587 - Box //题目:给出6个矩形的长和宽,判断它们能否构成长方体的六个面 //6/3=2 个相同的面 WA,no more data in #include <stdio. ...
- UVa1587 Box(排序)
题意:给出6个矩形的长和宽,问是否可以构成一个长方体. 思路:长方体的长宽高分别为a,b,c,假设a < b < c,6个矩形分别为ab,ab,ac,ac,bc,bc 代码如下: #inc ...
- 算法竞赛入门经典(第二版) | 习题3-10 盒子 (pair结构体)(UVa1587,Box)
大意: 给定6个矩形的长和宽,判断他们能否构成一个长方体. 题目(提交)链接→UVa-1587 没使用过该网站的同学请猛戳这里→vJudge教程 储备知识: pair结构体: pair是将2个数据组合 ...
- UVA1587 Box
题意:给定6个矩形的长和宽wi和hi(1<=wi,hi<=1000),判断它们能否构成长方体的六个面. 思路:一个矩形的六个面中,每两个对立面是相同的,相当于由三个不同的面复制而成,而这三 ...
- [刷题]算法竞赛入门经典 3-10/UVa1587 3-11/UVa1588
书上具体所有题目:http://pan.baidu.com/s/1hssH0KO 题目:算法竞赛入门经典 3-10/UVa1587:Box 代码: //UVa1587 - Box #include&l ...
- 《算法竞赛入门经典(第2版)》——学习记录
前言: 这里主要记录本人在学习紫书过程中充分理解过的题目的AC代码,便于以后回顾时查找代码和思路,毕竟看别人的真的有点难懂.此外,本书甚至是本书之外的相关知识学习也可能在此留下记录. 作为一只 ...
- UVA1587 盒子 Box 题解
题意翻译 给定6个矩形的长和宽wi和hi(1<=wi,hi<=10000),判断它们能否构成长方体的六个面. 输入输出样例 Sample Input 1345 2584 2584 683 ...
- UVA1587 盒子 Box
用的最笨的暴力的方法,看了以前写的代码比较短但是也没有心思去搞明白怎么回事了 #include <bits/stdc++.h>#define fi first #define se sec ...
- 远程控制virtual box虚拟机系统的三种方式
远程控制virtual box虚拟机系统的三种方式[阅读时间:5分钟] 1.使用现有的远程控制软件 2.使用SSH连接 3.使用远程桌面控制虚拟机系统 对于把虚拟机安装在寝室笔记本的人来说,能够远程控 ...
- ICE BOX 配置,使用----第一篇
一 理论部分 (1) 为什么要使用icebox? icebox server代替了通常的server. icebox是为了方便集中管理多个ice服务而建立的. 它通过使用icebox服务器,把ice服 ...
最新文章
- java openjdk 卸载_java – 如何卸载OpenJDK?
- C++(三)——类和对象(上)
- VPGAME 的 Kubernetes 迁移实践
- Objective-C:OC内部可变对象和不可变对象的深(复制)拷贝问题思考:
- 保留小数点位数和格式
- MATLAB基础教程(10)——二维中的数据可视化
- canal DevGuide
- hdu1251(trie树)
- SP2-0750: You may need to set ORACLE_HOME to your Oracle software directory
- 51nod1417 天堂里的游戏
- python自动化,自动登录并且添加一个门店
- 后期强ps画意大师完美破解版一键打造中国风
- Python.暴力破解rar密码
- OSI七层协议的简介
- Windows Hook案例分析与技术探索
- Asp 操作Access数据库时出现死锁.ldb的解决方法
- Stata | 字符函数
- PyQt5实时汇率查询
- AD8255手电筒芯片 双路LED控制芯片 支持多种模式 外围简单
- 古典密码----仿射密码加解密
热门文章
- Notepad++快捷键使用技巧
- 安装华为T2000软件,无法初始化MS SQL 2000问题解决办法
- 支付宝支付 第十集:支付回调
- c# 计算点到线段的距离
- 三角形css_纯 CSS 实现绘制各种三角形(各种角度)
- 修改js文件需要重启服务器,关于Node.js中频繁修改代码重启服务器的问题
- 点云数据的类型主要分为_点云学习在自动驾驶中的研究概述
- 网线传输速度测试_高效的以太网测试仪应该具备哪些功能?
- php 获取对象中的元素个数组长度,php数组长度怎么获取
- QtCreater的安装路径