gz


私信TA

用户名:dotcpp0639730

访问量:92

签 名:

等  级
排  名 4404
经  验 1707
参赛次数 0
文章发表 4
年  龄 0
在职情况 学生
学  校
专  业

  自我简介:

解题思路:

把矩形分解成两条边去分析,然后矩形两个点x值或者y值确定第一个点是最大值,然后去比较得出下图6种情况算出边长。最后主函数求出横向和纵向两个边长就可以得到面积。

题目 1471图解.jpg
注意事项:

比较的时候考虑相等的情况,我统一合并到大于的情况下。

参考代码:

#include<stdio.h>

 

void max(double *x1,double *x2)  //交换函数,始终让第一个数最大

{

    double t0;

    if(*x2>*x1)

    {

        t0=*x1;

        *x1=*x2;

        *x2=t0;

    }

}


  //求边长函数,把矩形分成两个边来分析,前两个数是矩形1的两个x值(或y值),后两个数是矩形2的两个x值(或y值),

double length(double A1,double A2,double B1,double B2)

{

    max(&A1,&A2);  //始终让前一个点的坐标值大于后一个点,方便后面分析

    max(&B1,&B2);  //同上

    if(B2>=A2&&A1>=B1) return B1-B2;  //情况1

    if(B2<A2&&A1>=B1&&B1>=A2) return B1-A2;  //情况2

    if(B2<A2&&A1>=B1&&B1<A2) return 0;  //情况3

    if(B2>=A2&&A1<B1&&A1>=B2) return A1-B2;  //情况4

    if(B2>=A2&&A1<B1&&A1<B2) return 0;  //情况5

    if(B2<A2&&A1<B1) return A1-A2;  //情况6

}

 

int main()

{

    double Ax1,Ay1,Ax2,Ay2,Bx1,By1,Bx2,By2,a,b;  //定义四个点的x值和y值,可以用二维数组,但是我觉得用有意义的字母更直观,定义边长a边长b

    scanf("%lf %lf %lf %lf",&Ax1,&Ay1,&Ax2,&Ay2);  //输入矩形1的数据

    scanf("%lf %lf %lf %lf",&Bx1,&By1,&Bx2,&By2);  //输入矩形2的数据

    a=length(Ax1,Ax2,Bx1,Bx2);  //边长a相交处是横向边长

    b=length(Ay1,Ay2,By1,By2);  //边长a相交处是纵向边长

    printf("%.2lf",a*b);  //两数相乘就是面积

    return 0;

}


 

0.0分

0 人评分

  评论区

  • «
  • »