С++: чередовалка
Понадобилось нечто подобное, но проще посмотреть на примере учебной задачи:
Для заданного целочисленного массива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;
06.11.2013, 19:51 [9696 просмотров]