解题思路:
把矩形分解成两条边去分析,然后矩形两个点x值或者y值确定第一个点是最大值,然后去比较得出下图6种情况算出边长。最后主函数求出横向和纵向两个边长就可以得到面积。
注意事项:
比较的时候考虑相等的情况,我统一合并到大于的情况下。
参考代码:
#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 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复