深度优先

这个家伙好懒,除了文章什么都没留下

0%

【算法】矩形面积交

基础练习 矩形面积交

时间限制:1.0s 内存限制:512.0MB

锦囊1

判断。

锦囊2

公共部分为两个矩形左边界较大值到右边界较小值,从下边界较大值到上边界较小值。

问题描述

平面上有两个矩形,它们的边平行于直角坐标系的X轴或Y轴。对于每个矩形,我们给出它的一对相对顶点的坐标,请你编程算出两个矩形的交的面积。

输入格式

输入仅包含两行,每行描述一个矩形。
在每行中,给出矩形的一对相对顶点的坐标,每个点的坐标都用两个绝对值不超过10^7的实数表示。

输出格式

输出仅包含一个实数,为交的面积,保留到小数后两位。

样例输入

1 1 3 3
2 2 4 4

样例输出

1.00

就是判断,再就是保留两位小数。代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
import java.util.Scanner;
import java.math.BigDecimal;

public class Main {

/**
* @param args
*/
public static void main(String[] args) {

double[] arr1=new double[4];
double[] arr2=new double[4];

Scanner sc=new Scanner(System.in);
while(sc.hasNext()){
for (int i = 0; i < arr1.length; i++) {
arr1[i]=sc.nextDouble();
}
for (int i = 0; i < arr1.length; i++) {
arr2[i]=sc.nextDouble();
}

double[] arr3=new double[4];
double[] arr4=new double[4];

//长
arr3[0]=arr1[0];
arr3[1]=arr1[2];
arr3[2]=arr2[0];
arr3[3]=arr2[2];

if((arr1[0]>arr2[0]&&arr1[0]>arr2[2])&&(arr1[2]>arr2[0]&&arr1[2]>arr2[2])){
System.out.println("0.00");
return;
}
if((arr1[0]<arr2[0]&&arr1[0]<arr2[2])&&(arr1[2]<arr2[0]&&arr1[2]<arr2[2])){
System.out.println("0.00");
return;
}

for (int i = 0; i < arr4.length; i++) {
for (int j = 0; j < arr4.length; j++) {
if(arr3[i]<arr3[j]){
double t=arr3[i];
arr3[i]=arr3[j];
arr3[j]=t;
}
}
}
double chang=Math.abs(arr3[2]-arr3[1]);

//宽
arr4[0]=arr1[1];
arr4[1]=arr1[3];
arr4[2]=arr2[1];
arr4[3]=arr2[3];
for (int i = 0; i < arr4.length; i++) {
for (int j = 0; j < arr4.length; j++) {
if(arr4[i]<arr4[j]){
double t=arr4[i];
arr4[i]=arr4[j];
arr4[j]=t;
}
}
}
double kuan=Math.abs(arr4[2]-arr4[1]);
double d=kuan*chang;

BigDecimal bd=BigDecimal.valueOf(d);
String str=bd.setScale(2, BigDecimal.ROUND_HALF_UP).toString();
System.out.println(str);
}
}
}