蓝桥杯VIP试题 之 基础练习 矩形面积交 - JAVA
2023-09-11 14:20:51 时间
蓝桥杯VIP试题 之 基础练习 矩形面积交 - JAVA
题目描述
平面上有两个矩形,它们的边平行于直角坐标系的X轴或Y轴。对于每个矩形,我们给出它的一对相对顶点的坐标,请你编程算出两个矩形的交的面积。
输入
输入仅包含两行,每行描述一个矩形。
在每行中,给出矩形的一对相对顶点的坐标,每个点的坐标都用两个绝对值不超过10^7的实数表示。
输出
输出仅包含一个实数,为交的面积,保留到小数后两位。
样例输入
1 1 3 3
2 2 4 4
样例输出
1.00
PS:由给出的样例画个样图,可以看出相交的矩形长和宽都可以通过做差的方式来求得;那么,我们就去思考是谁和谁的差去组成长和宽就可以了;最后的结果要的是面积,所以不用考虑长>宽这种类似的问题.长的求解公式如下:
长:X = min_x - max_x;
min_x = 矩形1的较大的x坐标和矩形2中较大的坐标中的小的那个;
max_x = 矩形1的较小的x坐标和矩形2中较小的坐标中的大的那个;
同理求Y的值也就是所求的相交矩形的宽了,若所求的X,Y均大于0则说明有相交矩形,那么此时X*Y求出面积即可,注意要题目要求的格式保留两位小数;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
//接收输入,分别存到两个数组中
double[] rectangle_1 = new double[4];
double[] rectangle_2 = new double[4];
for(int i = 0; i < rectangle_1.length; i++) {
rectangle_1[i] = sc.nextDouble();
}
for(int j = 0; j < rectangle_2.length; j++) {
rectangle_2[j] = sc.nextDouble();
}
double X,Y;
//求相交矩形的长:X
double min_X = Math.min(Math.max(rectangle_1[0], rectangle_1[2]), Math.max(rectangle_2[0], rectangle_2[2]));
double max_X = Math.max(Math.min(rectangle_1[0], rectangle_1[2]), Math.min(rectangle_2[0], rectangle_2[2]));
X = min_X - max_X;
//求相交矩形的宽:Y
double min_Y = Math.min(Math.max(rectangle_1[1], rectangle_1[3]), Math.max(rectangle_2[1], rectangle_2[3]));
double max_Y = Math.max(Math.min(rectangle_1[1], rectangle_1[3]), Math.min(rectangle_2[1], rectangle_2[3]));
Y = min_Y - max_Y;
//若有一个是非正数,则两矩形是不想交的
if(X > 0 && Y > 0) {
double S = X * Y;
//保留两位小数并输出
System.out.println(String.format("%.2f", S));
}else {
System.out.println("0.00");
}
}
}
相关文章
- [Java基础] java的守护线程与非守护线程
- Java面向对象基础--类的设计及分析问题的方法---用户登录例子
- JAVA学习(三):Java基础语法(变量、常量、数据类型、运算符与数据类型转换)
- Java实现 LeetCode 823 带因子的二叉树(DP)
- Java实现 蓝桥杯 算法训练 画图(暴力)
- Java实现 基础算法 求100以内的质数
- Java实现 蓝桥杯VIP 算法训练 连续正整数的和
- Java实现 蓝桥杯VIP 基础练习 Huffuman树
- 超大福利 | 这款免费 Java 在线诊断利器,不用真的会后悔!
- Java基础之简单修改jar包中的class
- 【JAVA】毕向东Java基础视频教程-笔记
- 【Java开发基础】计算两个毫秒之间相差多少天
- Atiitt 对象转换json 序列化规范 Java 循环引用的解决 设置序列化层次深度 去除不必的属性 太长不方便月度 jsonObject.remove("num1"); Prety fo
- java 身份证验证
- Java语言基础学习(三)
- java移位运算符实验程序:<<(左移)、>>(带符 号右移)和>>>(无符号右移)
- Java递归基础案例-二分查找法
- 【Java】java中javaSE与javaEE的区别
- java.awt.Color类
- JavaSE学习总结(二)——Java语言基础
- Java并发编程与高并发之多线程
- java中集合类中Collection接口中的List接口的常用方法熟悉
- java基础——各种变量你晕了不?
- Package java.sql
- 【Java语法基础】Java编译环境配置、基本语法、流程控制