Помогите пожалуйста. Как последний элемент массива корректно проверить по условию?
Задание - нечётные числа массива нужно удвоить, а чётные получены добавлением собственного значения с начальным значением следующего элемента.
Как и где написать условие, если последний элемент массива вдруг оказался четным?
Кусочек моего кода:
for (int i = 0; i < N; i++)
{
if (arr[i] % 2 != 0)
{
arr[i] = arr[i] * 2;
}
else
{
arr[i] = arr[i] + arr[i + 1];
}
cout << " " << arr[i];
}
Ответы (2 шт):
Автор решения: Artyomka
→ Ссылка
Я бы так сделал. Лучше вынести лишнюю проверку за пределы, тк она нужна нам будет только один раз.
// Проходим массив по элементам N - 1 (Кроме последнего)
for (int i = 0; i < N - 1; ++i)
{
arr[i] = (arr[i] % 2 != 0) ? arr[i] * 2 : arr[i] + arr[i + 1];
}
// Заполняем последний по условию
arr[N - 1] = (arr[N - 1] % 2 != 0) ? arr[N - 1] * 2 : arr[N - 1];
Или если продолжить ваш вариант.
for (int i = 0; i < N; ++i)
{
if (arr[i] % 2 != 0)
{
arr[i] *= 2;
}
else
{
arr[i] += arr[i + 1];
}
}
if (arr[N - 1] % 2 != 0)
{
arr[N - 1] *= 2;
}
Автор решения: AR Hovsepyan
→ Ссылка
Для чего исключение? Тут нет исключительных ситуаций. Нужно лишь условие:
for (int i = 0; i < N; i++)
{
if (arr[i] % 2 != 0)
{
arr[i] *= 2;
}
else if( i != N - 1)
{
arr[i] += arr[i + 1];
}
cout << " " << arr[i];
}
хоть и для int не существенно, но все же операторы *=, +=... быстрее чем операторы * , + с последующим присваиванием