Помогите пожалуйста разобраться

Дан массив целых чисел. Если в массиве все четные числа расположены перед нечетными числами, то вывести в новый массив все отрицательные элементы массива, иначе - все положительные. Как это представить не пойму, вот что я набросал. Прошу помощи пожалуйста

#include "stdafx.h"
#include <cmath>
#include <iomanip>
#include <iostream>
#include <time.h>
using namespace std;


int main()
{
    setlocale(LC_ALL, "Russian");
    int fv, lv, a;
    bool f=true;
    srand(time(0));
    cout << "Введите размерность a" << endl;
    cin >> a;
    cout << "Введите нижний предел рандомных чисел" << endl;
    cin >> fv;
    cout << "Введите верхний предел рандомных чисел" << endl;
    cin >> lv;
    int array[100];
    for (int i = 0; i < a; i++)
    {
        array[i] = fv + rand() % (lv - fv + 1);
            cout << array[i] << "\t";
    }
    for (int i = 0; i < a; i++)
    {
        if (array[i] %2 ==0 && array[i] %2 != 0)
        {
            f=true;
        }
        else (f=false);
    }
    for (int i = 0; i < a; i++)
    {
        if (f=true && array[i]<0)
        {cout << array[i] << " ";}
        else (f=false && array[i]>0);
        {cout << array[i] << " ";}
    }
    system("pause");
    return 0;
}
    

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

Автор решения: Mikhailo
#include <cmath>
#include <iomanip>
#include <iostream>
#include <time.h>
using namespace std;

int main() {
    setlocale(LC_ALL, "Russian");
    int fv, lv, a;
    bool f = true;
    srand(time(0));
    cout << "Введите размерность a: ";
    cin >> a;
    cout << "Введите нижний предел рандомных чисел: ";
    cin >> fv;
    cout << "Введите верхний предел рандомных чисел: ";
    cin >> lv;
    int array[100];

    for (int i = 0; i < a; i++) {
        array[i] = fv + rand() % (lv - fv + 1);
        cout << array[i] << "\t";
        }

    cout << "\n\n";

    for (int i = 0; i < a - 1; i++) {
        if (array[i] % 2 && array[i + 1] % 2 == 0) {
            f = false;
            break;
            }
        }

    for (int i = 0; i < a; i++) {
        if (!f && array[i] <= 0) continue;

        if (f && array[i] >= 0) continue;

        cout << array[i] << "\t";
        }

    cout << "\n\n";
    }
→ Ссылка
Автор решения: avp

Я бы организовал проверку условия "все четные перед нечетными" следующим образом. Первый шаг -- поиск первого нечетного (запомним его индекс). Второй шаг -- проверка, что со следующего индекса четные не встречаются.

  int odd_index;
  bool f = false; // положим, что условие "все четные перед нечетными" не выполняется
  
  do {
     // найдем индекс первого нечетного
     for (odd_index = 0; odd_index < a; odd_index++)
        if (array[odd_index] % 2 != 0)
           break;
     if (odd_index == a) // нечетных в массиве нет
        break;
     if (odd_index == 0) // перед первым нечетным вообще нет четных
        break;
     // предположим, что все оставшиеся числа нечетные
     f = true;
     // проверим, что предположение верно
     for (int i = odd_index + 1; i < a; i++)
        if (array[i] % 2 == 0) { // предположение неверно
           f = false;
           break;
        }
   } while (0);

Надеюсь, скопировать в новый массив отрицательные или положительные (в зависимости от условия f) числа вы сможете сами.

→ Ссылка
Автор решения: AR Hovsepyan

Вам нужно вывести в новый массив, а не на консоль. Для решения легче воспользоваться услугами стандартных алгоритмов. Если новый массив это new_array, то:

#define All(x)  std::begin(x), std::end(x)

auto is_even =  [](int i) { return i % 2 == 0; }; 
auto positive = [](int i) { return i >= 0; };
auto negative = [](int i) {  return i < 0; };

if (std::is_partitioned(All(array), is_even)) {
    std::copy_if(All(array), std::begin(new_array), negative);   
}
else
    std::copy_if(All(array), std::begin(new_array), positive);
→ Ссылка