每日一题(小白)模拟娱乐篇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,请检查

相关推荐
千峰之道14 小时前
让聆听成为享受:专注音质的HiFi播放器 Tunely Play v0.0.3
音频·娱乐
superstarsupers2 天前
重返冒险岛,关智斌携《Endless Adventure》点燃澳门新春舞台
娱乐
StarChainTech4 天前
打造火爆的线上推币机APP:一站式合规娱乐解决方案
大数据·人工智能·物联网·小程序·娱乐·软件需求·共享经济
xhyyvr4 天前
VR雷霆双翼:双人沉浸式航空航天体验,解锁科普娱乐新维度
vr·娱乐·vr航空航天·vr雷霆双翼·vr飞机模拟
苯酸氨酰糖化物8 天前
HTML+CSS学信网学籍学历查询页面-支持任意修改内容信息
前端·css3·html5·娱乐
marteker9 天前
YouTube在娱乐格局不断变化之际重塑视觉形象
娱乐
灵狐数据FoxData9 天前
因它而兴,亦受其困,《终末地》能否助鹰角挣脱“方舟”的辉煌烙印?
科技·游戏·娱乐·玩游戏
娱乐我有11 天前
曾比特加盟英皇娱乐首支单曲上线 《雪出个未来》摇滚旋律诠释破冰重生
娱乐
淦。。。。13 天前
题解:P14013 [POCamp 2023] 送钱 / The Generous Traveler
开发语言·c++·经验分享·学习·其他·娱乐·新浪微博
FlameAIStudio15 天前
用人格模型去做漫威角色测试,是比娱乐向更严肃的一种设计
人工智能·机器学习·娱乐