Как решить эту задачу?(2 дня уже мучаюсь с ней)

Задан массив ЦЕЛЫХ чисел. Если в данной последовательности ни одно четное число не расположено после нечетного, то получить все отрицательные члены последовательности. Иначе – все положительные. Порядок следования чисел в обоих случаях заменяется на обратный.

Спасибо заранее. Вот что я пытался сделать(Я хотя бы на правильном пути?)

int main() {
setlocale(LC_ALL, "RU");

const int SIZE = 5;
int arr[SIZE];

cout << "Введите элементы массива" << endl;
for (int i = 0; i < SIZE; i++)
{
    cin >> arr[i];
}
for (int i = 0; i < SIZE; i++)
{
    cout << arr[i] << endl;
}

for (int i = 0; i < SIZE-1; i++)
{
    if (arr[i]%2==0 && arr[i+1]%2==0)
    {
        for (int j = 0; j < SIZE; j--)
        {
            if (j<0)
            {
                cout << arr[i] << endl;
                break;
            }

        }
    }
}
for (int i = 0; i < SIZE; i++)
{
    if (arr[i] % 2 != 0 && arr[i + 1] % 2 == 0)
    {
        for (int j = 0; j < SIZE; j--)
        {
            if (j > 0)
            {
                cout <<  arr[i] << endl;
                break;
            }
        }
    }
}

}


Ответы (2 шт):

Автор решения: MBo

Ну вы близки. Можно так (здесь писал, не проверял):

int flag = 0;
for (int i = 0; i < SIZE-1; i++)
{
    if (arr[i]%2 !=0 && arr[i+1]%2==0)
    {
        flag = 1; 
        break;
    }
}
if (flag)
   for (int i = SIZE - 1; i >=0; i--)
      if (arr[i] > 0) 
          cout <<  arr[i] << endl;
else
   for (int i = SIZE - 1; i >=0; i--)
      if (arr[i] < 0) 
          cout <<  arr[i] << endl;
→ Ссылка
Автор решения: AR Hovsepyan

Можно сразу в первом же цикле отметить:

  • положительное ли число?
  • является ли число четным, расположенным после нечетного?

По этим данным можем получить соответствующие элементы. Притом проверяем с начала до конца, а выводим с конца до начала:

//стоит ли перед  четным числом  нечетное число?
bool   pos = false;
//для того, чтобы сразу отметить положительные числа
bool    is_positive[SIZE] = {false};
int i = 0;
cin >> arr[i];
if(arr[i] >= 0)
   is_positive[i] = true;
//начинаем со второго элемента
while (++i < SIZE && cin >> arr[i])
{         
    if (arr[i] >= 0)
        is_positive[i] = true;
    //если есть четное число, расположенный после не четного
    if (!pos && arr[i] % 2 == 0 && arr[i - 1] % 2 != 0)
        pos = true; //нужны положительные числа
}
   
//в конце цикла i == SIZE 
//значение pos указывает какие элементы  нужны
while (--i >= 0) {  
    if(is_positive[i] == pos)
        cout << arr[i] << ' ';
}

Если не смотреть на остальной код, достаточно заметить вашу ошибочную проверку в цикле if (j > 0) Это условие всегда будет выполняться

→ Ссылка