Nommyde
Гуру
(2743)
6 лет назад
Можно сделать два цикла, которые работают по очереди. Один выводит чётные, другой пропускает нечётные:
int i = A.Length - 1;
while (i >= 0) {
while (i >= 0 && (A[i] % 2 == 0)) Console.WriteLine(A[i--]);
while (i >= 0 && (A[i] % 2 == 1)) i--;
}
Jurijus Zaksas
Искусственный Интеллект
(426852)
6 лет назад
for (int i = a.Length >> 1 << 1; i >= 0; i----)
Это если тебе нужны четные индексы.
А если нужно проверять четность самих значений без if, то есть вот такой формально попадающий под это дело метод:
while( !(bool)(a[i] & 1))
{
Console.WriteLine(a[i]);
break;
}
NommydeГуру (2743)
6 лет назад
В первом случае, если a.Length чётное, то первая итерация произойдёт с i == a.Length. То есть за границей массива.
Во втором случае какой-то странный у вас метод. i не изменяется, в теле цикла безусловный break. Выведется либо ничего, либо один элемент.
Mr. Perfectly FineОракул (63004)
6 лет назад
Можно полностью без булевых операций (кроме условия выхода из цикла)
Action<int>[] Print = { (x) => { Console.Write(x + "\t"); }, (x) => { } };
for (int i = k.Length - 1; i >=0; --i) Print[k[i] & 1](k[i]);