SCAU 矩形重叠面积如何求?

学校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;
}


参考了一下其它相似问题的做法,但是现在这个循环会直接把第一组数据的结果输出,怎么改才能先把所有的数据先输入再一起把结果全部输出呢?

分享一下我问到的回答哦!(这个只是修改了我的这个方法而已,有更加简单的思路哦!)


#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);
            int res[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);
                res[i] = s;
            }
            for(i=0;i<t;i++){
                printf("%d\n",res[i]);
            }
            return 0;
        }