欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 健康 > 美食 > 每日一题(小白)模拟娱乐篇12

每日一题(小白)模拟娱乐篇12

2025/4/4 0:31:02 来源:https://blog.csdn.net/weixin_65550131/article/details/146949820  浏览:    关键词:每日一题(小白)模拟娱乐篇12

图形题要么你思维好,要么直接画个图很容易看出规律!我比较菜所以我画图

正常情况:无相交,直接进行计算(x2-x1)*(y2-y1)+(x4-x3)*(y4-y3)

特殊的情况,特殊情况是x1小于x4且x3<x2。也就是说上面的矩形的左下角y轴必定低于下面矩形的右上角,且上面矩形的右上角x轴必定大于下面矩形的左下角,但是同样也不能低于下面y轴或者大于右边的x轴(其中一种)。说简单点就是判断有无相交部分,若有则减掉一次即可。

具体的相交四种情况如上图所示,红色图形和蓝色图形是相对而言的。

如果你看完还是很懵逼不要紧,先把原来的面积计算出来,接着排序,相交时只需要判断哪个比较大,用大的减去小的就可以得到高和宽。

最重要的就是把两个矩形的位置确定好,这里我们使用Lambda表达式。👇

Arrays.sort(arr,(x,y)->Integer.compare(x[0],y[0]));

相对而言左边的总是在arr【0】,接下来的你就可以用你的方法尝试解决。

无论哪种情况绿色矩形左边x轴最小选取黄色和绿色最小的右边x轴减去即可得到宽。                   高度情况有两种,所以都需要判断,用上面较大的y轴减去下面较大的y轴即可。就算绿色矩形在黄色矩形里面依然

粗黄色即为可能的小x轴,粗红色必定为大x轴,所以宽必定为红绿中的最大x-黄x

以此类推

代码如下👇
	public static void main(String[] args) {Scanner scanner =new Scanner(System.in);int[][] arr=new int[2][4];for (int i = 0; i < 2; i++) {for (int j = 0; j < 4; j++) {arr[i][j]=scanner.nextInt();}}Arrays.sort(arr,(x,y)->Long.compare(x[0],y[0]));long area=(arr[0][2]-arr[0][0])*(arr[0][3]-arr[0][1])+(arr[1][2]-arr[1][0])*(arr[1][3]-arr[1][1]);//计算面积if (arr[1][0]>=arr[0][2]) {//右边矩形右下y点和左边矩形右上x点System.out.println(area);}else {int w=Math.min(arr[0][2],arr[1][2])-arr[1][0];//右边减左边 int h=Math.min(arr[0][3],arr[1][3])-Math.max(arr[0][1],arr[1][1]);//(上减下)area-=w*h;System.out.println(area);}scanner.close();}

留了BUG,请检查

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词