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

来源:互联网 发布:在线网络理财投资服务 编辑:程序博客网 时间:2024/05/21 17:26

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

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


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

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

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

#include<algorithm>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<stdio.h>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<b.x;    else return a.y<b.y;}sort(box,box+6,cmp);

下面是这一题的代码:

#include<stdio.h>#include<algorithm>using namespace std;pair <int,int> 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");    }}


原创粉丝点击