Найти самую длинную непрерывную цепочку нулей в последовательности нулей и единиц - C (СИ)
Формулировка задачи:
Требуется найти самую длинную непрерывную цепочку нулей в последовательности нулей и единиц.
Входные данные
В единственной строке входного файла INPUT.TXT записана последовательность нулей и единиц (без пробелов). Суммарное количество цифр не превышает 100.
Выходные данные
В единственную строку выходного файла OUTPUT.TXT нужно вывести искомую длину цепочки нулей.
Моя задача выводит 0 при любых входных данных, помогите исправить.
#include <stdio.h>
int main()
{
int c,x,max;
FILE *fin, *fout;
fin=fopen("input.txt","r");
fout=fopen("output.txt","w");
c = 0;
max = 0;
while ( !EOF ){
fscanf(fin, "%ld",&x);
if (x==0)
c = c+1;
else
c = 0;
if (c>max)
max = c;
}
fprintf(fout, "%ld",max);
fclose(fin);
fclose(fout);
return 0;
}Решение задачи: «Найти самую длинную непрерывную цепочку нулей в последовательности нулей и единиц»
textual
Листинг программы
int c, max, nc;
max = 0;
while((c = getc(fin)) != EOF)
if(c == '0') {
nc = 1;
while((c = getc(fin)) == '0')
nc++;
if(nc > max)
max = nc;
}
Объяснение кода листинга программы
В этом коде происходит следующее:
- Объявляются три переменные:
c,maxиnc. - Переменная
maxинициализируется значением 0. Она будет использоваться для отслеживания максимальной длины непрерывной цепочки нулей. - В цикле
whileпроисходит чтение символа из файла, пока не будет достигнут конец файла (EOF). - Если прочитанный символ равен '0', то начинается внутренний цикл
while, который будет выполняться, пока следующий символ также равен '0'. - Внутри внутреннего цикла переменная
ncинициализируется значением 1 и увеличивается на 1 на каждой итерации. - Когда внутренний цикл завершается (т.е. когда встречается символ, отличный от '0'), проверяется, является ли текущая длина непрерывной цепочки нулей больше, чем максимальная длина, отслеживаемая переменной
max. - Если это так, то значение переменной
maxобновляется значением переменнойnc. - После завершения внешнего цикла
whileвозвращается 0, что означает, что была достигнута конечная часть файла. В итоге, после выполнения этого кода, переменнаяmaxбудет содержать длину самой длинной непрерывной цепочки нулей в файле.