| 网站首页 | 业界新闻 | 群组 | 交易 | 人才 | 下载频道 | 博客 | 代码贴 | 编程论坛
共有 2004 人关注过本帖
标题:[没人气,抄道题] 矩形面积
只看楼主 加入收藏
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:273
帖 子:6001
专家分:34312
注 册:2011-1-18
结帖率:90.91%
  已结贴   问题点数:100  回复次数:8   
[没人气,抄道题] 矩形面积
Find the total area covered by two rectilinear rectangles in a 2D plane.
Each rectangle is defined by its bottom left corner and top right corner as shown in the figure.
Assume that the total area is never beyond the maximum possible value of int.



求两个矩形组成的总面积,每个矩形给出了左下角坐标和右上角坐标。
如图,左边矩形的面积是 24,右边矩形的面积是 27,两矩形的交集面积是 6,所以总面积是 24+27-6=45

int computeArea(int A, int B, int C, int D, int E, int F, int G, int H) {
    // 代码
}
附件: 您没有浏览附件的权限,请 登录注册
搜索更多相关主题的帖子: possible  beyond  bottom  
2015-08-07 09:43
我爱吃青菜
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:6
帖 子:190
专家分:500
注 册:2015-3-29
  得分:2 
想到一个代码,不过各种if、else嵌套,不敢拿出来献丑
2015-08-07 10:36
诸葛欧阳
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:流年
等 级:贵宾
威 望:82
帖 子:2786
专家分:14619
注 册:2014-10-16
  得分:2 
这个是不是要从几何学角度解决

一片落叶掉进了回忆的流年。
2015-08-07 10:49
我爱吃青菜
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:6
帖 子:190
专家分:500
注 册:2015-3-29
  得分:2 
哈哈,被看透了
2015-08-07 10:58
kenierlee
Rank: 6Rank: 6
等 级:侠之大者
威 望:3
帖 子:58
专家分:474
注 册:2015-7-28
  得分:50 
程序代码:
#include <stdio.h>

#define MAX(a, b) ((a) > (b) ? (a) : (b))
#define MIN(a, b) ((a) < (b) ? (a) : (b))

int computeArea(int A, int B, int C, int D, int E, int F, int G, int H)
{
    int left   = MAX(A, E);
    int bottom = MAX(B, F);
    int right  = MIN(C, G);
    int top    = MIN(D, H);
    return (C - A) * (D - B) + (G - E) * (H - F) - MAX(right - left, 0) * MAX(top - bottom, 0);
}

int main(void)
{
    printf("%d\n", computeArea(-3, 0, 3, 4, 0, -1, 9, 2));
    return 0;
}


[ 本帖最后由 kenierlee 于 2015-8-7 11:43 编辑 ]
2015-08-07 11:08
sunbeam_
Rank: 3Rank: 3
来 自:我家
等 级:论坛游侠
威 望:1
帖 子:31
专家分:113
注 册:2015-8-2
  得分:2 
回复 5楼 kenierlee
如果没有重叠部分呢?

爱好计算机的电气学渣
2015-08-07 11:27
kenierlee
Rank: 6Rank: 6
等 级:侠之大者
威 望:3
帖 子:58
专家分:474
注 册:2015-7-28
  得分:2 
回复 6楼 sunbeam_
感谢兄台指点,已更正
2015-08-07 11:44
诸葛欧阳
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:流年
等 级:贵宾
威 望:82
帖 子:2786
专家分:14619
注 册:2014-10-16
  得分:20 
程序代码:
#include<stdio.h>
#include<math.h>
int computeArea(int a,int b,int c,int d,int e,int f,int g,int h)
{
    int area,s1,s2,s3;
    s1=(c-a)*(d-b);
    s2=(g-e)*(h-f);
    int max1,max2;
    max1=(g>c?g:c)-(a<e?a:e);
    max2=(h>d?h:d)-(f<b?f:b);   
    if(c-a+g-e>max1&&d-b+h-f>max2)//两矩形相交
    {
    s3=(c-a+g-e-max1)*(d-b+h-f-max2);//相交矩形面积
    area=s1+s2-s3;
    }
    else
        area=s1+s2;
    return area;
}
int main()
{
    int a,b,c,d,e,f,g,h;
    int area;
    scanf("%d%d%d%d%d%d%d%d",&a,&b,&c,&d,&e,&f,&g,&h);
    area=computeArea(a,b,c,d,e,f,g,h);
    printf("%d",area);
  return 0;
}

一片落叶掉进了回忆的流年。
2015-08-07 11:51
calix
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:28
帖 子:249
专家分:1442
注 册:2015-5-4
  得分:20 
程序代码:
#include<stdio.h>

int abss(int a, int b){
    if(a > b){
        return a - b;
    }
    return b - a;
}

double computeArea(int A, int B, int C, int D, int E, int F, int G, int H) {
    double totalArea, area1, area2;
    area1 = (C - A) * (D - B);
    area2 = (G - E) * (H - F);
    printf("area1 = %f\narea2 = %f\n", area1, area2);
    totalArea = area1 + area2;
    //根据重心位置和长宽判断是否相交
    int center_x = abss(A + C, E + G),
        center_y = abss(B + D, F + H),
        length_x = C - A + G - E,
        length_y = D - B + H - F;
    if(center_x < length_x && center_y < length_y){
        double cross = (length_x - center_x) * (length_y - center_y) / 4;
        printf("cross = %f\n", cross);
        totalArea -= cross;
    }
    return totalArea;
}

int main(){
    printf("area = %f", computeArea(-3,0,3,4,0,-1,9,2));
    return 0;
}

2015-08-07 13:40







关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.050769 second(s), 7 queries.
Copyright©2004-2018, BCCN.NET, All Rights Reserved