Проблема в работе программы, для решения простейшей задачи

Здравствуйте, дали такую задачу:
Как мы знаем, Владимир периодически посещает плавательный бассейн. При взгляде сверху бассейн представляет собой прямоугольник размера W × H ; его юго-западный угол имеет координаты (0; 0), северо-восточный — ( W ; H ).

Владимир находился в точке с координатами ( X ; Y ), когда прозвенел звонок, оповещающий об окончании сеанса. Теперь Владимиру нужно плыть к ближайшему бортику, чтобы выйти из бассейна. Помогите ему определить, в какую сторону следует плыть.

Входные данные

Первая строка содержит целые числа W и H (1 ≤ W , H ≤ 100) — соответственно длину и ширину бассейна.

Первая строка содержит целые числа X и Y (0 ≤ XW , 0 ≤ YH ) — координаты точки, в которой находится Владимир.

Выходные данные

Выведите один из символов N (север), E (восток), S (юг), W (запад), соответствующий направлению до ближайшего бортика.

Если подходящих ответов несколько, выведите любой из них.

Написал такой код

#include <stdio.h>
#include <iostream>
#include <math.h>
int main() {
  int W;
  int H;
  int X;
  int Y;
  scanf("%d%d%d%d", &W, &H, &X, &Y);
  if ((X <= (W / 2)) && (Y <= (H / 2))) {
    if (X <= Y) {
      printf("W");
    }
    else {
      printf("S");
    }
  }
  if ((X <= (W / 2)) && (Y >= (H / 2))) {
    if (X <= (Y-(H/2))) {
      printf("W");
    }
    else {
      printf("N");
    }
  }
  if ((X >= (W / 2)) && (Y <= (H / 2))) {
    if ((X - W/2) <= Y) {
      printf("E");
    }
    else {
      printf("S");
    }
  }
  if ((X >= (W / 2)) && (Y >= (H / 2))) {
    if ((X - (W/2)) <= (Y - (H/2))) {
      printf("E");
    }
    else {
      printf("N");
    }
  }

}

Когда проверяю на сайте выдает ошибку на втором тесте, как можно упростить программу, и что бы она прошла все тесты.
Заранее спасибо!

Так а в тесте что?

в тесте ошибка Wrong Answer тест 7
Wrong Answer:
• Решение вывело неверный ответ в указанном тесте.
• Файл не сохранён в среде разработки или на проверку отправлен ошибочный файл.
• Решение содержит неинициализированные переменные.
• Используется значение итерационной переменной после цикла for.

if (X <= W / 2) {
    if (Y <= H / 2) {
        if (X <= Y) {
            printf("W");
        } else {
            printf("S");
        }
    } else {
        if (X <= H - Y) {
            printf("W");
        } else {
            printf("N");
        }
    }
} else {
    if (Y <= H / 2) {
        if (W - X <= Y) {
            printf("E");
        } else {
            printf("S");
        }
    } else {
        if (W - X <= H - Y) {
            printf("E");
        } else {
            printf("N");
        }
    }
}
1 лайк

а в структуре расстояние до стороны и аббревиатура стороны, 4 таких структуры в массив и простейшая сортировка по возрастанию расстояния. И ни какой тучи if-ов в которой запутаться как два пальца об асфальт )

1 лайк

Это навело меня на такие if:

    int S = W;
    char D = ' ';
    if (X < S) {
        S = X;
        D = 'W';
    }
    if (W - X < S) {
        S = W - X;
        D = 'E';
    }
    if (Y < S) {
        S = Y;
        D = 'S';
    }
    if (H - Y < S) {
        S = H - Y;
        D = 'N';
    }
    return D;
1 лайк

Спасибо всем большое, все работает!