学校oj系统上的问题不会做
描述
给出两个矩阵坐标,算出这两个矩形重叠的面积
输入格式
第一行给出t表示有t组案例
每组案例给出(x1,y1),(x2,y2)表示第一个矩形左下角坐标和右上角坐标
之后给出(X3,Y3) ,(X4,Y4)表示第二个矩形左下角坐标和右上角坐标
其中1<=t<=10000;1<=x1,y1,x2,y2,X3,Y3,X4,Y4<=1000000000;
输出格式
每个案例输出一行结果表示重叠面积
输入样例
2
1 1 4 4
2 1 5 3
1 1 3 3
2 2 4 4
输出样例
4
1
现在这个循环会直接把第一组数据的结果输出,怎么改才能先把所有的数据先输入再一起把结果全部输出呢?或者不用我这个方法,换一种方法也可以!
#include<stdio.h>
double max(double a, double b){
if(a>b) return a;
return b;
}
double min(double a, double b){
if(a>b) return b;
return a;
}
int main(){
int t,i,s;
double a,b,c,d,e,f,g,h;
scanf("%d",&t);
for(i=0;i<t;i++){
scanf("%lf%lf%lf%lf%lf%lf%lf%lf",&a,&b,&c,&d,&e,&f,&g,&h);
s=0;
double x1,y1,x2,y2,x3,y3,x4,y4;
x1=min(a,c);x2=max(a,c);
x3=min(e,g);x4=max(e,g);
y1=min(b,d);y2=max(b,d);
y3=min(f,h);y4=max(f,h);
double left=max(x1,x3);
double right=min(x2,x4);
double up=min(y2,y4);
double down=max(y1,y3);
if(left<right&&up>down)
s=(right-left)*(up-down);
printf("%d\n",s);
}
return 0;
}
现在的运行结果
2
1 1 4 4
2 1 5 3
4
1 1 3 3
2 2 4 4
1
现在这个思路参考了相似问题的答案,可是运行结果不太符合。询问同学,1.建议我使用函数来解,但是不太懂;2.运用数组先把所有结果储存起来再输出,但是一直搞不成功
我想要达到的结果
输入
2
1 1 4 4
2 1 5 3
1 1 3 3
2 2 4 4
输出
4
1