周初十 2022-12-18 21:19 采纳率: 50%
浏览 117
已结题

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


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

1条回答 默认 最新

  • 周初十 2022-12-20 17:31
    关注

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

    
    #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;
            }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 12月28日
  • 已采纳回答 12月20日
  • 修改了问题 12月19日
  • 创建了问题 12月18日

悬赏问题

  • ¥15 使用ue5插件narrative时如何切换关卡也保存叙事任务记录
  • ¥20 软件测试决策法疑问求解答
  • ¥15 win11 23H2删除推荐的项目,支持注册表等
  • ¥15 matlab 用yalmip搭建模型,cplex求解,线性化处理的方法
  • ¥15 qt6.6.3 基于百度云的语音识别 不会改
  • ¥15 关于#目标检测#的问题:大概就是类似后台自动检测某下架商品的库存,在他监测到该商品上架并且可以购买的瞬间点击立即购买下单
  • ¥15 神经网络怎么把隐含层变量融合到损失函数中?
  • ¥15 lingo18勾选global solver求解使用的算法
  • ¥15 全部备份安卓app数据包括密码,可以复制到另一手机上运行
  • ¥20 测距传感器数据手册i2c