Member 13212047 Ответов: 1

Может ли кто-нибудь объяснить мне выход, пожалуйста?


Учитывая координаты нижнего левого угла (x,y), длину(l) и ширину (w) 2-х прямоугольников, напишите программу, чтобы найти пересечение двух заданных прямоугольников.

Предположим: пересечение всегда происходит.

тестовый пример

Вход 1

3 8 1515

2 6 10 10

Выход 1

2 6 17 16

Что я уже пробовал:

#include <stdio.h>
#define max(x, y) (((x) > (y)) ? (x) : (y))
#define min(x, y) (((x) < (y)) ? (x) : (y))
int main()
{

int x1,y1,x3,y3,l1,l2,w1,w2;
scanf("%d %d %d %d %d %d %d %d",&x1,&y1,&l1,&w1,&x3,&y3,&l2,&w2);




int x2,y2,x4,y4;
x2=x1+l1;
y2=y1+w1;
x4=x3+l2;
y4=y3+w2;


int x5 = max(x1, x3);
int y5 = max(y1, y3);
int x6 = min(x2, x4);
int y6 = min(y2, y4);

printf("%d,%d,%d,%d",x5,y5,x1,y6);


return 0;
}

Patrice T

В чем проблема ?
вы написали этот код, не понимая его ?

RickZeeland

Я на самом деле не эксперт по Си, но явно что-то не так с #define max().
Попробуйте заменить его операторами IF и посмотрите, что произойдет ...

Richard MacCutchan

В этих определениях нет ничего плохого.

1 Ответов

Рейтинг:
1

OriginalGriff

Что тут объяснять?
Ты написал ее, ты знаешь, что она делает.
Вероятно, в финале это должно быть x6, а не x1 printf, но ...

(О, и ваши цифры "выход 1" неверны: это "2, 6, 12, 16", а не " 2, 6, 17, 16")