UVa1587--Box--盒子(代码超简洁)

题目链接https://vjudge.net/problem/UVA-1587

给定6个矩形的长和宽wi和hi(1≤wi,hi≤1000),判断它们能否构成长方体的6个面。


这道题不能想的太简单了,但是也不要想得太复杂。之前自己写的太复杂了,后来在网上看了一个答案,感觉写的非常好。

1、不要写成死循环。要能退出。

2、sort函数和swap函数都需要头文件支持

#include
using namespace std;

swap(box[i].first,box[i].second);//可以交换各类型数据,字符串等

sort(box,box+6);//对数组、结构体等进行排序

3、swap函数

直接交换数字:

int a=2,b=3;
swap(a,b);
printf("%d %d\n",a,b);

交换字符串:

char *a="hello",*b="world";
swap(a,b);
printf("%s %s\n",a,b);

关于自定义swap函数:更多自定义swap点击这里http://blog.chinaunix.net/uid-20769502-id-3436523.html

#include
myswap(int *a,int *b){    //注意②
    int c;    //注意③
    c=*a;
    *a=*b;
    *b=c;
}
int main(){
    int a,b;
    scanf("%d%d",&a,&b);
    myswap(&a,&b);    //注意①
    printf("%d %d",a,b);
}


4、sort函数

去重排序:

sort(box,box+6);
new_len=sort(box,box+6)-box;

自定义排序规则:

typedef struct {
    int x;
    int y;
}mybox;
int cmp(mybox a,mybox b){
    if(a.x!=b.x) return a.x

下面是这一题的代码:

#include
#include
using namespace std;
pair  box[6];//注意书写方式
int i;
int main(){
    while(1){
        for(i=0;i<6;i++){
            if(scanf("%d%d",&box[i].first,&box[i].second)!=2) return 0;
            if(box[i].first>box[i].second)
                swap(box[i].first,box[i].second);
        }
        sort(box,box+6);//我试了一下,此处排序是按照先first递增,其次second递增排序
        puts(box[0].first==box[1].first&&box[1].first==box[2].first&&box[2].first==box[3].first&&
             box[0].second==box[1].second&&box[1].second==box[4].first&&box[4].first==box[5].first&&
             box[2].second==box[3].second&&box[3].second==box[4].second&&box[4].second==box[5].second?
             "POSSIBLE":"IMPOSSIBLE");
    }
}


你可能感兴趣的:(UVa)