#include<stdio.h> /*void swap(double a,double b){ 这里如果这样用的话只会改变形参的值,不会改变形参的值 double temp; temp=a; a=b; b=temp; }*/ double max(double a,double b){ if(a>b) return a; else return b; } double min(double a,double b){ if(a<b) return a; else return b; } int main(){ double x1,y1,x2,y2,x3,y3,x4,y4,temp; while(scanf("%lf %lf %lf %lf %lf %lf %lf %lf",&x1,&y1,&x2,&y2,&x3,&y3,&x4,&y4)!=EOF){ if(x1>x2) {temp=x1;x1=x2;x2=temp;}//swap(x1,x2); if(x3>x4) {temp=x3;x3=x4;x4=temp;}//swap(x3,x4); if(y1>y2) {temp=y1;y1=y2;y2=temp;}//swap(y1,y2); if(y3>y4) {temp=y3;y3=y4;y4=temp;}//swap(y3,y4); x1=max(x1,x3); y1=max(y1,y3); x2=min(x2,x4); y2=min(y2,y4); printf("%.2lf\n",x1>x2||y1>y2?0.00:(x2-x1)*(y2-y1)); } return 0;}
做这道题的时候我答案出来了,但是去杭电的时候WA,原因在于swap函数那里,形参的改变不会影响实参的改变,所以要么用指针(指针这里形参与实参这里也要注意,要交换地址,交换值没有用),要么去掉swap函数,直接交换