Помогите пожалуйста разобраться
Дан массив целых чисел. Если в массиве все четные числа расположены перед нечетными числами, то вывести в новый массив все отрицательные элементы массива, иначе - все положительные. Как это представить не пойму, вот что я набросал. Прошу помощи пожалуйста
#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 шт):
#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";
}
Я бы организовал проверку условия "все четные перед нечетными" следующим образом. Первый шаг -- поиск первого нечетного (запомним его индекс). Второй шаг -- проверка, что со следующего индекса четные не встречаются.
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) числа вы сможете сами.
Вам нужно вывести в новый массив, а не на консоль. Для решения легче воспользоваться услугами стандартных алгоритмов.
Если новый массив это 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);