原题链接:蓝桥杯基础练习VIP-矩形面积交
解题思路:由于题目中所给的一对点我们并不知道是做对角线的点还是右对角线的点,也不知道是先给的是左下角的点还是右上角的点(以左对角线为例)。因此我们需要先将点的位置确定,接下来就好计算了。
①根据所给的一堆点,我们可以确定(min(x1,x2),min(y1,y2))一定是左下角的点,(max(x1,x2),max(y1,y2))一定是右上角的点。
②重新确定完点的坐标之后,我们知道,如果两个矩形有重合,那么需要满足
第一个矩形左下角的点一定小于第二个矩形右上角的点,
第一个矩形右上角的点一定大于第二个矩形左下角的点。
③若②满足情况,
将四个点的x坐标从小到大排序sort(x11,x12,x21,x22)
将四个点的x坐标从小到大排序sort(y11,y12,y21,y22)
④相交面积 = 排序后x中间的两个点的差值 * 排序后y中间两个点的差值
注意事项:
参考代码:
def function(): A = list(map(float,input().split())) B = list(map(float,input().split())) Anew = [min(A[0],A[2]),min(A[1],A[3]),max(A[0],A[2]),max(A[1],A[3])] #重新定位坐标 Bnew = [min(B[0],B[2]),min(B[1],B[3]),max(B[0],B[2]),max(B[1],B[3])] if (Anew[0] < Bnew[2] and Anew[1] < Bnew[3]) and (Bnew[0] < Anew[2] and Bnew[1] < Anew[3]): #判断是否相交 x = Anew[::2]+Bnew[::2] y = Anew[1::2]+Bnew[1::2] x.sort() #对四个点的x坐标排序 y.sort() #对四个点的y坐标排序 xd = x[2] - x[1] #计算中间两个点的差值 yd = y[2] - y[1] area = xd * yd else: area = 0 print('%.2f' % area) if __name__ == '__main__': function()
0.0分
6 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复