题目链接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);//对数组、结构体等进行排序
直接交换数字:
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);
}
去重排序:
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");
}
}