输入和输出格式:
输入的第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;
}
如果有人有其他逻辑,请告诉我。
答案 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;
}