概述
问题描述
平面上有两个矩形,它们的边平行于直角坐标系的X轴或Y轴。对于每个矩形,我们给出它的一对相对顶点的坐标,请你编程算出两个矩形的交的面积。
输入格式
输入仅包含两行,每行描述一个矩形。
在每行中,给出矩形的一对相对顶点的坐标,每个点的坐标都用两个绝对值不超过10^7的实数表示。
输出格式
输出仅包含一个实数,为交的面积,保留到小数后两位。
这道题首先注意输入的数字问题,题中并没有说不可以是浮点数,这一点在样例的输出结果中也可以看出,接着是这道题在正面来解情况是很复杂的,因为两个矩形相交的情况包含很多种的,不如直接从反面来解,把两矩阵不相交的情况找出之后,剩下的就只有相交的情况了,第一版代码:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
// TODO 自动生成的方法存根
Scanner sc = new Scanner(System.in);
float JuXing1X1 = sc.nextFloat();
float JuXing1Y1 = sc.nextFloat();
float JuXing1X2 = sc.nextFloat();
float JuXing1Y2 = sc.nextFloat();
float JuXing2X1 = sc.nextFloat();
float JuXing2Y1 = sc.nextFloat();
float JuXing2X2 = sc.nextFloat();
float JuXing2Y2 = sc.nextFloat();
float X = Math.abs(Math.max(JuXing1X1, JuXing1X2) - Math.min(JuXing2X1, JuXing2X2));
float Y = Math.abs(Math.max(JuXing1Y1, JuXing1Y2) - Math.min(JuXing2Y1, JuXing2Y2));
System.out.format("%.2f", X * Y);
}
}
这版代码我就是以正面的思维进行的,但这样考虑的不全面,只对了三道题,接下来我又补充找了其他情况但是发现情况还是找不全:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
// TODO 自动生成的方法存根
Scanner sc = new Scanner(System.in);
float JuXing1X1 = sc.nextFloat();
float JuXing1Y1 = sc.nextFloat();
float JuXing1X2 = sc.nextFloat();
float JuXing1Y2 = sc.nextFloat();
float JuXing2X1 = sc.nextFloat();
float JuXing2Y1 = sc.nextFloat();
float JuXing2X2 = sc.nextFloat();
float JuXing2Y2 = sc.nextFloat();
float X = 0, Y = 0;
if (Math.max(JuXing2X1, JuXing1X2) < Math.min(JuXing2X1, JuXing2X2)) {
X = Math.abs(Math.max(JuXing1X1, JuXing1X2) - Math.min(JuXing2X1, JuXing2X2));
Y = Math.abs(Math.max(JuXing1Y1, JuXing1Y2) - Math.min(JuXing2Y1, JuXing2Y2));
} else if (Math.max(JuXing1X1, JuXing1X2) > Math.max(JuXing2X2, JuXing2X1)
&& Math.min(JuXing1X1, JuXing1X2) < Math.min(JuXing2X2, JuXing2X1)) {
X = Math.abs(JuXing2X1 - JuXing2X2);
Y = Math.abs(JuXing2Y1 - JuXing2Y2);
}
System.out.format("%.2f", X * Y);
}
}
这版代码是又多想了一种情况,但还是考虑不全,这种情况又比上题多对了一道,有点烦,这样下去不是办法,干脆一不做二不休直接找它的反面,于是终极版就来了:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
// TODO 自动生成的方法存根
Scanner sc = new Scanner(System.in);
double JuXing1X1 = sc.nextDouble();
double JuXing1Y1 = sc.nextDouble();
double JuXing1X2 = sc.nextDouble();
double JuXing1Y2 = sc.nextDouble();
double JuXing2X1 = sc.nextDouble();
double JuXing2Y1 = sc.nextDouble();
double JuXing2X2 = sc.nextDouble();
double JuXing2Y2 = sc.nextDouble();
double bigger1X = Math.max(JuXing1X1, JuXing1X2);
double smaller1X = Math.min(JuXing1X1, JuXing1X2);
double bigger1Y = Math.max(JuXing1Y1, JuXing1Y2);
double smaller1Y = Math.min(JuXing1Y1, JuXing1Y2);
double bigger2X = Math.max(JuXing2X1, JuXing2X2);
double smaller2X = Math.min(JuXing2X1, JuXing2X2);
double bigger2Y = Math.max(JuXing2Y1, JuXing2Y2);
double smaller2Y = Math.min(JuXing2Y1, JuXing2Y2);
double X1 = 0, Y1 = 0, X2 = 0, Y2 = 0;
if (bigger1X <= smaller2X || smaller1X >= bigger2X || bigger1Y <= smaller2Y || smaller1Y >= bigger2Y) {
System.out.println("0.00");
} else {
X1 = Math.min(bigger1X, bigger2X);
X2 = Math.max(smaller1X, smaller2X);
Y1 = Math.min(bigger1Y, bigger2Y);
Y2 = Math.max(smaller1Y, smaller2Y);
System.out.format("%.2f", Math.abs(X1 - X2) * Math.abs(Y1 - Y2));
}
}
}
这里就是将不成立的条件全部找出来,剩下的就只是来求构成矩阵的坐标的问题了,分别找到最大最小值,之后即可以找到构成相交矩阵的坐标,最后利用坐标绝对值相乘即可得出答案。
加油!!!
奥利给!!!
最后
以上就是舒心眼睛为你收集整理的试题 基础练习 矩形面积交 JAVA 蓝桥杯的全部内容,希望文章能够帮你解决试题 基础练习 矩形面积交 JAVA 蓝桥杯所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复