【问题标题】:calculate co-ordinates of lower left corner of minimum enclosing rectangle and length and width provided 2 rectangle计算最小封闭矩形的左下角的坐标以及提供2个矩形的长度和宽度
【发布时间】:2015-06-24 17:21:14
【问题描述】:

输入输出格式:

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

输出由 4 个整数组成,分别对应联合矩形的 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;
}

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

【问题讨论】:

  • 如果您在这里发布一些在线编程挑战,请至少在问题正文中完整描述问题。
  • @Eugene 给定左下角 (x,y) 的坐标,以及 2 个矩形的长度 (l) 和宽度(w),编写一个程序来找到包含 2 个的可能的最小矩形给定的矩形。输入和输出格式:输入的第一行由 4 个整数组成,由空格分隔,对应于第一个矩形的 x、y、l 和 w。输入的第二行由 4 个整数组成,由空格分隔,对应于第二个矩形的 x、y、l 和 w。输出由 4 个整数组成,分别对应联合矩形的 x、y、l 和 w。
  • 在问题正文中
  • @EugeneSh。问题在顶部的问题正文中进行了描述。
  • @Jashaszun 可以从该信息推断问题。但真正的描述在评论中。

标签: c algorithm rectangles coordinate-systems


【解决方案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 方向。如果是其他方式,应该不会太难改变。

【讨论】:

  • 将后两个测试&lt; 替换为&gt; 使得(x1+w1) &gt; (x2+w2)
  • @WeatherVane 是的,当然。谢谢指正!
  • @WeatherVane 是的,并不是我们所有人在回答问题时都可以访问 C 运行时。没有必要讽刺,尤其是当我很好地感谢你的时候。
  • @WeatherVane 哈哈哈是的,这就是我的意思。抱歉,把问题弄糊涂了。
  • @Jashaszun,Weather Vane 我尝试了这段代码,但对于上述输入,我得到 2 6 17 16 所以我用 max_w 替换了 max_l ,反之亦然,所以我得到了正确的答案。对于这种情况,它不会在其他情况下得到,例如 2 1 1 2 和 2 4 1 1 输出应该是 2 1 1 4 但它给出 2 1 2 4
【解决方案2】:

我在在线课程中遇到了同样的问题... 这是我的问题链接。 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;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-18
    • 1970-01-01
    • 1970-01-01
    • 2014-02-04
    • 1970-01-01
    相关资源
    最近更新 更多