博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
基础训练—矩形面积交 C语言 & C++ & JAVA代码(平面上有两个矩形,它们的边平行于直角坐标系的X轴或Y轴。对于每个矩形,我们给出它的一对相对顶点的坐标,请你编程算出两个矩形的交的面积。)
阅读量:3960 次
发布时间:2019-05-24

本文共 2291 字,大约阅读时间需要 7 分钟。

问题描述 矩形面积交

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

输入格式
  输入仅包含两行,每行描述一个矩形。
  在每行中,给出矩形的一对相对顶点的坐标,每个点的坐标都用两个绝对值不超过10^7的实数表示。
输出格式
  输出仅包含一个实数,为交的面积,保留到小数后两位。
样例输入
1 1 3 3
2 2 4 4
样例输出
1.00

C语言代码

#include 
/*#define max(x,y) ((x)>(y)?(x):(y))#define min(x,y) ((x)<(y)?(x):(y))*/ //这里也可以用宏定义的方法来使用max和min函数 double max(double a,double b){
if(a>b) return a; else return b;}double min(double a,double b){
if(a>b) return b; else return a;}int main (){
double a1,b1,a2,b2,a3,b3,a4,b4; scanf("%lf %lf %lf %lf",&a1,&b1,&a2,&b2); scanf("%lf %lf %lf %lf",&a3,&b3,&a4,&b4); double m1 = max(min(a1,a2),min(a3,a4)); double n1 = max(min(b1,b2),min(b3,b4)); double m2 = min(max(a1,a2),max(a3,a4)); double n2 = min(max(b1,b2),max(b3,b4)); //这四行取出第一个矩形最大的点,第二个矩形最小的点 if(m1 < m2 && n1 < n2) //判断有没有相交 {
printf("%.2lf\n",(m2 - m1) * (n2 - n1)); } else printf("0.00\n"); return 0; }

C++:

#include 
#include
#include
#include
using namespace std;int main(){
double x1,x2,y1,y2; double q1,q2,w1,w2; while(cin>>x1>>y1>>x2>>y2>>q1>>w1>>q2>>w2) {
double xx=max(min(x1,x2),min(q1,q2)); double yy=max(min(y1,y2),min(w1,w2)); double xxup=min(max(x1,x2),max(q1,q2)); double yyup=min(max(y1,y2),max(w1,w2)); if(xxup>xx) printf("%.2f\n",fabs((xx)-(xxup))*fabs((yy)-(yyup))); else printf("0.00\n"); }}

JAVA

import java.io.*;public class Main{
public static void main(String[] args)throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); double[][] arr = new double[2][4]; String tag1[] = br.readLine().split(" "); String tag2[] = br.readLine().split(" "); for(int b=0;b<4;b++) {
arr[0][b] = Double.valueOf(tag1[b]); } for(int b=0;b<4;b++) {
arr[1][b] = Double.valueOf(tag2[b]); } double a,b,c,d,e,f,g,h; a = Math.max(arr[0][0],arr[0][2]); b = Math.min(arr[0][0],arr[0][2]); c = Math.max(arr[0][1],arr[0][3]); d = Math.min(arr[0][1],arr[0][3]); e = Math.max(arr[1][0],arr[1][2]); f = Math.min(arr[1][0],arr[1][2]); g = Math.max(arr[1][1],arr[1][3]); h = Math.min(arr[1][1],arr[1][3]); if(a

其实思路都是差不多的哈哈~~

转载地址:http://mjrzi.baihongyu.com/

你可能感兴趣的文章
shell中$*和$@的区别
查看>>
log4cxx 的编译安装过程和使用
查看>>
简单邮件系统程序
查看>>
STL里的multimap使用详解
查看>>
STL 库其中的 std::string用法总结
查看>>
模态对话框的销毁过程与非模态对话的几种销毁方法
查看>>
C++实现http下载 && 24点计算编码风格
查看>>
memcached了解使用和常用命令详解
查看>>
GDB调试各功能总结
查看>>
"undefined reference to" 多种可能出现的问题解决方法
查看>>
类结构定义
查看>>
Windows下关于多线程类 CSemaphore,CMutex,CCriticalSection,CEvent,信号量CSemaphore的使用介绍
查看>>
图像处理基本算法(汇总)以及实现
查看>>
C++编程获取本机网卡信息 本机IP 包括Windows和Linux
查看>>
C++连接CTP接口实现简单量化交易
查看>>
服务端使用c++实现websocket协议解析及通信
查看>>
C# string.Format使用说明
查看>>
Linux下安装Mysql数据库开发环境
查看>>
Linux用户及用户组添加和删除操作
查看>>
通用 Makefile 的编写方法以及多目录 makefile 写法
查看>>