计算最小包围矩形的左下角和长度和宽度的坐标,提供2个矩形

时间:2015-06-24 17:21:15

标签: c algorithm rectangles coordinate-systems

输入和输出格式:

输入的第1行由4个整数组成,这些整数由对应于第一个矩形的x,y,l和w的空格分隔。 输入的第二行由4个整数组成,这些整数用空格分隔,对应于第二个矩形的x,y,l和w。

输出由4个整数组成,这些整数对应于Union矩形的x,y,l和w。

Sample Input :
3 8 1515
2 6 10 10
Sample Output:
2 6 16 17

这是我的代码 它会在某些测试用例中得到验证,并且在我提交时不会被接受。 我正在网上编码网站上尝试这个。 这是我的代码。

#include<stdio.h>
#include<math.h>
int main()
{
    int x1,y1,x2,y2,l1,w1,l2,w2,x3,y3,l3,w3;
    scanf("%d %d %d %d",&x1,&y1,&l1,&w1);
    scanf("\n%d %d %d %d",&x2,&y2,&l2,&w2);
    if(x1<x2)
        x3=x1;
    else
        x3=x2;
    if(y1<y2)
        y3=y1;
    else
        y3=y2;
    if(x1==x2)
    {
        if(l1<l2)
            w3=l2;
        else
            w3=l1;
    }
    if(y1==y2)
    { 
        // printf("inp");
        if(w1<w2) 
        {
            w3=w2;
            //printf("%d",w3);
        }
        else
        {
            w3=w1;
        }
    }
    if(x1<x2)
        l3=l2+fabs(x1-x2);
    else if(x2<x1)
        l3=l1+fabs(x1-x2);
    if(y1<y2)
        w3=w2+fabs(y1-y2);
    else if(y2<y1)
        w3=w1+fabs(y1-y2);
    printf("%d ",x3);
    printf("%d ",y3);
    printf("%d ",l3);
    printf("%d",w3);
    return 0;
}

如果有人有其他逻辑,请告诉我。

2 个答案:

答案 0 :(得分:1)

#include<stdio.h>
int main()
{
    int x1, y1, x2, y2, l1, w1, l2, w2;
    scanf("%d %d %d %d",&x1,&y1,&l1,&w1);
    scanf("\n%d %d %d %d",&x2,&y2,&l2,&w2);

    int min_x = x1 < x2 ? x1 : x2;
    int min_y = y1 < y2 ? y1 : y2;
    int max_x = (x1+w1) > (x2+w2) ? (x1+w1) : (x2+w2);
    int max_y = (y1+l1) > (y2+l2) ? (y1+l1) : (y2+l2);

    int max_w = max_x - min_x;
    int max_l = max_y - min_y;

    printf("%d %d %d %d", min_x, min_y, max_l, max_w);
    return 0;
}

假设您的宽度在x方向,而长度在y方向。如果是另一种方式,那就不应该太难改变。

答案 1 :(得分:0)

我在网上课程遇到同样的问题...... 这是我对问题的链接。 union of two rectangles.write a program to find the smallest possible rectangle enclosing the 2 given rectangles 和我的程序正在工作,没有任何错误或“错误答案”被接受..

#include<stdio.h>
int main() {
  int x1, x2, y1, y2, l1, l2, w1, w2, xmax, xmin, ymax, ymin;
  scanf(“%d %d %d %d\n”,&x1,&y1,&l1,&w1);
  scanf(“%d %d %d %d\n”,&x2,&y2,&l2,&w2);
  xmin = x1 < x2 ? x1 : x2;
  ymin = y1 < y2 ? y1 : y2;
  int b = x1 + l1;
  int c = x2 + l2;
  xmax = b > c ? b : c;
  int d = y1 + w1;
  int e = y2 + w2;
  ymax = d > e ? d : e;
  int l = xmax - xmin;
  int w = ymax - ymin;
  printf(“%d %d %d %d”,xmin,ymin,l,w);
  return 0;
}