Как решить эту задачу?(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 шт):
Ну вы близки. Можно так (здесь писал, не проверял):
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;
Можно сразу в первом же цикле отметить:
- положительное ли число?
- является ли число четным, расположенным после нечетного?
По этим данным можем получить соответствующие элементы. Притом проверяем с начала до конца, а выводим с конца до начала:
//стоит ли перед четным числом нечетное число?
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) Это условие всегда будет выполняться