БлогNot. С++: чередовалка

Помощь дата->рейтинг Поиск Почта RSS канал Статистика nickolay.info Домой

С++: чередовалка

Понадобилось нечто подобное, но проще посмотреть на примере учебной задачи:

Для заданного целочисленного массива a размерностью n проверить, чередуются ли в нём чётные и нечётные значения. Если чередование есть, вернуть 0, в противном случае вернуть порядковый номер первого элемента, нарушающего закономерность.

int cheredovalka (int n, int *a) {
 int i,ch=a[0]%2;
 for (i=1; i<n; i++) {
  if (a[i]%2==ch) return i;
  else ch^=1;
 }
 return 0;
}

Соответственно, для проверки чередования любого другого признака код будет ничуть не сложнее:

флаг = признак(a[0])
для i от 1 до n-1 шаг 1 нц
 если признак(a[i])==флаг вернуть "ошибка в элементе i"
 иначе флаг^=1
кц

Функция «признак» должна возвращать 0 или 1, в зависимости от выполнения признака для очередного элемента массива.

Конечно, можно было проверять остатки от деления на 2 и не выпендриваясь, как-то вроде

for (int i=0; i<n-1; i++)
 if (a[i]%2==a[i+1]%2) return i+1;
return 0;

теги: c++ алгоритм

06.11.2013, 19:51; рейтинг: 8157

  свежие записипоиск по блогукомментариистатистика

Наверх Яндекс.Метрика
© PerS
вход