zoukankan      html  css  js  c++  java
  • 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个字节

        当buf1<buf2时,返回值小于0;
        当buf1==buf2时,返回值=0;
        当buf1>buf2时,返回值大于0。
      
  • 相关阅读:
    php实现cookie加密解密
    三个php加密解密算法
    一个经典的PHP加密解密算法
    Webpack 核心模块 tapable 解析(转)
    详解基于vue,vue-router, vuex以及addRoutes进行权限控制
    编写一个插件
    详解css3 pointer-events(阻止hover、active、onclick等触发事件来
    Dockerfile HEALTHCHECK详解
    Dockerfile 指令 WORKDIR介绍
    NPM私有包部署到私有仓库
  • 原文地址:https://www.cnblogs.com/bianjunting/p/9871881.html
Copyright © 2011-2022 走看看