Другие языки программирования и технологии

Задача по языку Си

Задан массив S, размерностью n, содержащий большое количество нулевых элементов. Найти длину самой длинной последовательности подряд идущих элементов, равных 0. Вывести также индексы начала и конца этой последовательности. Как я пытался это сделать: Вобщем создаю одномерный динамический массив, количество элементов (n) в котором определяется пользователем, заполняется он счетчиком случайных чисел (random(2)). Так как мне нужно определить длину максимального количества подряд идущих нулей, то через цикл, в массиве я сравниваю каждый элемент с нулем, если ноль, то длина некоторой константы (к) увеличивается на 1 (изначально к=0), если попался не нулевой элемент, то значение (к) записывается как значение элемента в другом массиве, и (к) обнуляется... и т.д. в итоге я имею массив с длинами последовательностей из нулей, но проблема в том, что в этом массиве на значениях последних элементов могут оставатся не замененные длинами значения, т.е. если дальше мне нужно определить максимальный элемент в этом массиве, это скорей всего окажется послдний элемент этого массива... вобщем это решение 99% неверно, т.к. я еще и не смогу вывести 1 и последний элемент этой самой наибольшей последовательности нулей.... вот что было у меня в начале программы: void main() { int i, *S, n; int c[100], printf("\n Vvedite kol-vo elementov\n"); scanf("%d",&n); S=(int *)malloc(n*sizeof(int)); for(i=0;i<n;i++)>=random(2); j=0; K=0; c[100]=0; for(i=0;i<n;i++)>==0) K=K+1; else { c[j]=K; K=0 } if(K=0) j++; }
Фактически, у вас задача на нахождение максимального элемента в последовательбности, только несколько усложненная.

Вам просто нужно завести три переменные: одна - для длины последовательности нулей, вторая - для нчального индекса последовательности, третья - для конечного индекса последовательности.
В начале задаете все эти три переменные равными 0.

Затем начинаете сканирование вашей последовательности. Допустим, вы встретили в ней 0. Запоминаете позицию этого нуля в другой рабочей переменной (отличной от предыдущих трех переменных) . Затем подсчитываете количество 0 и запоминаете индекс последнего 0. Затем сравниваете найденное значение длины последовательности 0 с исходной переменной, которую мы определили в начале, и которая равна 0. Если длина последовательности из нулей больше 0, то вы в той начальной переменной сохраняете найденную длину, а в других двух переменных - начальный и конечный индексв последовательности. Затем двигаетесь по последовательности дальше, пока не найдете новую последовательность из 0, или не исчерпааете вюб последовательность.

Если программа пишется на С, то функция main должна возвращать значение типа int. То есть правильное объявление функции main такое

int main( void )

Кроме того непонятно, то ли вы выделяете динамически память для массива, то ли работаете с автоматически выделенным масиивым c[ 100 ] То есть вы динамически выделяете память и сохраняете ее адрес в указателе S, а с другой стороны вы заполняете случайными значениями массив c[ 100 ].

Вам надо опеределиться, либо вы работаете с динамически создаваемом массивом размерности n, либо вы работаете с массивом c[ 100 ]
Almat Sagimbaev
Almat Sagimbaev
79 586
Лучший ответ
Убери пробелы
h t t p : / / c o d e p a s t e . r u / 6 4 5 1 /

там ошибка
перед printf опиши:

if (lng>max)
max = lng;