В общем, есть задача:Напишите на языке Си функцию, которая ищет в массиве самую длинную непрерывную последовательность чисел, имеющих заданное значение. Параметры функции:
1) указатель на массив целых чисел,
2) количество элементов в массиве,
3) искомое значение.
Возвращаемое подпрограммой значение: целое число, которое равно длине самой длинной непрерывной последовательности чисел, имеющих заданное значение.
Например для массива
int array[] = { 1,5,5,5,5,5,8,9,9,3,3,3,9,0,0,0,3,3,4,5,5,5,1,3,3,3,3,3,3,3,3,3,3 };
и искомого числа 3 ответ будет 10
и искомого числа 5 ответ будет 5
и искомого числа 0 ответ будет 3
Есть два варианта кода:// ПЕРВЫЙ
int find(int *a, int lenght, int key)
{
int tmp = 0;
int result = 0;
for (int i = 0; i < lenght; i++) {
if (a[i] == key) tmp++;
if (a[i] != key) tmp = 0;
if (tmp > result) result = tmp;
}
return result;
}
// ВТОРОЙ
int search(const int * const array, const int size, const int number)
{
int max = 0;
int count = 0;
enum {N,Y} equally=N;
for(int i=0; i<size; ++i)
if(array[i]==number) {
++count;
if(equally==N)
equally = Y;
}
else if(array[i]!=number && equally==Y) {
if(max<count)
max = count;
count = 0;
equally = N;
}
if(max<count)
max = count;
return max;
}
Во втором нет ни одного лишнего присваивания.
В первом они происходят почти каждую итерацию.
Но первый намного проще.
Какой код лучше? =))