周初十 2022-12-20 16:12 采纳率: 50%
浏览 87
已结题

C语言 矩形重叠面积如何求?

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

  • 写回答

3条回答 默认 最新

  • 小秋Kaito 2022-12-20 16:56
    关注

    用一个数组存放结果,全部算完之后把数组里的内容输出。参考代码如下

    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;
            }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

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

悬赏问题

  • ¥100 set_link_state
  • ¥15 虚幻5 UE美术毛发渲染
  • ¥15 CVRP 图论 物流运输优化
  • ¥15 Tableau online 嵌入ppt失败
  • ¥100 支付宝网页转账系统不识别账号
  • ¥15 基于单片机的靶位控制系统
  • ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度