基础训练:矩形面积交

举报
AI 菌 发表于 2021/08/05 01:52:13 2021/08/05
【摘要】 本题思考 最开始我是分情况讨论各种相交的情况,发现判断语句写的非常繁琐,容易漏掉情况。其实这道题最简单的做法是: (1)找出不相交的通用判断方法 当一个矩形的横(纵)坐标的最大值小于另一矩形横(纵)坐标的最小值时,不相交 (2)找出相交情况面积的通用计算方法 相交的形状是个长方形,因此只需要计算长和宽。计算长:将四个横坐标升序排序,第三个减去第二个;同样的方法计算宽。...

本题思考

最开始我是分情况讨论各种相交的情况,发现判断语句写的非常繁琐,容易漏掉情况。其实这道题最简单的做法是:
(1)找出不相交的通用判断方法
当一个矩形的横(纵)坐标的最大值小于另一矩形横(纵)坐标的最小值时,不相交
(2)找出相交情况面积的通用计算方法
相交的形状是个长方形,因此只需要计算长和宽。计算长:将四个横坐标升序排序,第三个减去第二个;同样的方法计算宽。
完成上面两步,我们的编程逻辑就会变得非常清晰,一个if/else判断语句即可实现。

问题描述

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

输入格式

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

输出格式

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

样例输入

1 1 3 3
2 2 4 4

样例输出

1.00
程序清单:

#include<iostream>
#include<algorithm>
using namespace std;
int main()
{ double x[4],y[4]; //依次输入矩形坐标  cin>>x[0]>>y[0]>>x[1]>>y[1]>>x[2]>>y[2]>>x[3]>>y[3]; //判断不相交条件  if(max(x[0],x[1])<=min(x[2],x[3])||max(x[2],x[3])<=min(x[0],x[1])||max(y[0],y[1])<=min(y[2],y[3])||max(y[2],y[3])<=min(y[0],y[1])) cout<<"0.00";//不相交面积为0  else{ sort(x,x+4);//升序排序  sort(y,y+4); double length=x[2]-x[1];//中间的两个作差  double width=y[2]-y[1]; printf("%.2lf",length*width);//计算面积  } return 0;
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

这里也提供另一种方法,原理和上面一样。

#include <iostream>
#include <algorithm> 
#include <iomanip>
using namespace std;

int main()
{
	double A[4]={0};
	double B[4]={0};
	for(int i=0;i<4;i++) //输入矩形A 
		cin>>A[i];
	for(int i=0;i<4;i++) //输入矩形B 
		cin>>B[i]; double x[4]={A[0],A[2],B[0],B[2]}; //将所有的横坐标存入数组x,等待排序
	double y[4]={A[1],A[3],B[1],B[3]}; //将所有的纵坐标存入数组y,等待排序 double max_Ax=max(A[0],A[2]);
	double max_Ay=max(A[1],A[3]);
	double max_Bx=max(B[0],B[2]);
	double max_By=max(B[1],B[3]); double min_Ax=min(A[0],A[2]);
	double min_Ay=min(A[1],A[3]);
	double min_Bx=min(B[0],B[2]);
	double min_By=min(B[1],B[3]);
	//当一个矩形横(纵)坐标的最大值小于另一矩形横(纵)坐标的最小值时,不相交。 
	if(max_Ax<=min_Bx||max_Ay<=min_By||max_Bx<=min_Ax||max_By<=min_Ay)
		cout<<0.00<<endl;
	else
	{
		sort(x,x+4); //将数组x按升序排列 
		sort(y,y+4);
		double width=x[2]-x[1]; //相交面积的长 
		double height=y[2]-y[1]; //相交面积的 
		cout<<setiosflags(ios::fixed)<<setprecision(2)<<width*height<<endl; 
	}
	return 0;
}

  
 
  • 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

文章来源: ai-wx.blog.csdn.net,作者:AI 菌,版权归原作者所有,如需转载,请联系作者。

原文链接:ai-wx.blog.csdn.net/article/details/104659068

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。