(蓝桥杯题)基础练习 矩形面积交

问题描述
  平面上有两个矩形,它们的边平行于直角坐标系的X轴或Y轴。对于每个矩形,我们给出它的一对相对顶点的坐标,请你编程算出两个矩形的交的面积。
输入格式
  输入仅包含两行,每行描述一个矩形。
  在每行中,给出矩形的一对相对顶点的坐标,每个点的坐标都用两个绝对值不超过10^7的实数表示。
输出格式
  输出仅包含一个实数,为交的面积,保留到小数后两位。
样例输入
1 1 3 3
2 2 4 4
样例输出
1.00






import java.text.DecimalFormat;
import java.util.Scanner;
public class Main {
	public static void main(String[] args) {
		Scanner sc=new Scanner(System.in);
		double x1=sc.nextDouble();
		double y1=sc.nextDouble();
		double x2=sc.nextDouble();
		double y2=sc.nextDouble();
		
		double x11=sc.nextDouble();
		double y11=sc.nextDouble();
		double x12=sc.nextDouble();
		double y12=sc.nextDouble();
		
		double t1=0,t2=0,t11=0,t12=0;
		double sa=0.00;
		boolean f1=false,f2=false;
		if((x1>=x11&&x1<=x12)||(x1<=x11&&x1>=x12)){
			if((y1>=y11&&y1<=y12)||(y1<=y11&&y1>=y12)){
				t1=x1;t2=y1;
				f1=true;
			}
		}
		if((x2>=x11&&x2<=x12)||(x2<=x11&&x2>=x12)){
			if((y2>=y11&&y2<=y12)||(y2<=y11&&y2>=y12)){
				if(f1==true){
					t11=x2;t12=y2;
					f2=true;
				}
				else{
					t1=x2;t2=y2;
					f1=true;
				}
			}
		}
		if(f2==true){
			sa=S(t1,t2,t11,t12);
		}
		else{
			
			if((x11>=x1&&x11<=x2)||(x11<=x1&&x11>=x2)){
				if((y11>=y1&&y11<=y2)||(y11<=y1&&y11>=y2)){
					if(f1==true){
						t11=x11;t12=y11;
						f2=true;
					}
					else{
					  t1=x11;t2=y11;
					  f1=true;
					}
				}
			}
			if(f2==true){
				sa=S(t1,t2,t11,t12);
			}
			else{
				if((x12>=x1&&x12<=x2)||(x12<=x1&&x12>=x2)){
					if((y12>=y1&&y12<=y2)||(y12<=y1&&y12>=y2)){
						if(f1==true){
							t11=x12;t12=y12;
							f2=true;
						}
						else{
						  t1=x12;t2=y12;
						  f1=true;
						}
					}
				}
				sa=S(t1,t2,t11,t12);
			}
		}
		if(sa==0){
			System.out.println("0.00");
		}
		else{
			DecimalFormat df = new DecimalFormat("#.00");
	        System.out.println(df.format(sa));
		}
		
	}
	public static double S(double x1,double y1,double x2,double y2 ){
		double a=x1-x2>0?x1-x2:x2-x1;
		double b=y1-y2>0?y1-y2:y2-y1;
		return a*b;
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

u014068781

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值