zoukankan      html  css  js  c++  java
  • 基础练习 矩形面积交

    问题描述

      平面上有两个矩形,它们的边平行于直角坐标系的X轴或Y轴。对于每个矩形,我们给出它的一对相对顶点的坐标,请你编程算出两个矩形的交的面积。
    输入格式
      输入仅包含两行,每行描述一个矩形。
      在每行中,给出矩形的一对相对顶点的坐标,每个点的坐标都用两个绝对值不超过10^7的实数表示。
    输出格式
      输出仅包含一个实数,为交的面积,保留到小数后两位。
    样例输入
    1 1 3 3
    2 2 4 4
    样例输出
    1.00
     
    要点:
      1、判断是否相交
      2、通脱对坐标进行排序求出中间相交部分的两个顶点(这个比较巧妙,刚开始我一直在画图,希望通过分类判断进行求解)
      3、刚开始的输入不一定是从左到右的坐标需要进行调整
    java实现(这个代码写的不太好)
    import java.util.Arrays;
    import java.util.Scanner;
    
    public class Main {
        public static void main(String[] args) {
    
            Scanner scanner = new Scanner(System.in);
            double x1 = scanner.nextDouble();
            double y1 = scanner.nextDouble();
            double x2 = scanner.nextDouble();
            double y2 = scanner.nextDouble();
    
            if(x1>x2){
                double temp = x1;
                x1 = x2;
                x2 = temp;
    
            }
    
            if(y1>y2){
                double temp = y1;
                y1 = y2;
                y2 = temp;
            }
    
            double a1 = scanner.nextDouble();
            double b1 = scanner.nextDouble();
            double a2 = scanner.nextDouble();
            double b2 = scanner.nextDouble();
    
            if(a1>a2){
                double temp = a1;
                a1 = a2;
                a2 = temp;
            }
    
            if(b1>b2){
                double temp = b1;
                b1 = b2;
                b2 = temp;
            }
    
            //判断两个矩形是否相交
            if(x2<=a1||y2<=b1||a2<=x1||b2<=y1){
                System.out.println("0.00");
            }
            else {
                double [] x ={x1,x2,a1,a2};
                double [] y ={y1,y2,b1,b2};
                Arrays.sort(x);
                Arrays.sort(y);
    
                double area = (x[2]-x[1])*(y[2]-y[1]);
                System.out.printf("%.2f
    ",Math.abs(area));
                //System.out.println();
            }
        }
    }

    c++实现

    #include<iostream>
    #include<algorithm>
    #include<cstdio>
    using namespace std;
    
    int main(){
        double x[4];
        double y[4];
        for(int i=0;i<4;i++){
            cin>>x[i]>>y[i];
        }
    
        if(x[0]>x[1]){
            swap(x[0],x[1]);
        }
    
        if(y[0]>y[1]){
            swap(y[0],y[1]);
        }
    
        if(x[2]>x[3]){
            swap(x[2],x[3]);
        }
    
        if(y[2]>y[3]){
            swap(y[2],y[3]);
        }
    
        if(x[1]<=x[2]||y[1]<=y[2]||x[3]<=x[0]||y[3]<=y[0]){
            cout<<"0.00"<<endl;
        }
        else{
            sort(x,x+4);
            sort(y,y+4);
            //double area=(x[2]-x[1])*(y[2]-y[1]);
            printf("%.2lf
    ",(x[2] - x[1]) * (y[2] - y[1]));
        }
        return 0;
    }
  • 相关阅读:
    redis发布订阅
    CSS 布局
    CSS 布局
    CSS Float(浮动)实例
    CSS 布局
    CSS Float(浮动)
    CSS Position(定位)实例
    CSS Position(定位)
    CSS Display(显示) 与 Visibility(可见性)实例
    CSS Display(显示) 与 Visibility(可见性)
  • 原文地址:https://www.cnblogs.com/zhanghaijie/p/8328174.html
Copyright © 2011-2022 走看看