Найти наиболее длинную последовательность нулей - C (СИ)
Формулировка задачи:
Добрый день. Помогите написать программу,пожалуйста.
Вот задание :
Числа вводятся с клавиатуры до первого отрицательного числа. Написать программу,
которая находит номера начала и конца наиболее длинной последовательности нулей
Решение задачи: «Найти наиболее длинную последовательность нулей»
textual
Листинг программы
int i=0, n=-1, k=-1, a, L=0, Lt=0, nt=-1, kt=-1, flag=0;
while (1) {
scanf("%d", &a);
if (a < 0) break;
if (a==0) {
if (flag==0) {
nt = i;
Lt = 1;
}
else Lt++;
flag = 1;
kt = i;
if (Lt > L) {
L = Lt;
n = nt;
k = kt;
}
}
else flag = 0;
i++;
}
if (n < 0) printf( "Нет нулей\n"l;
else printf("Beg=%d End=%d L=%d\n", n, k, L);
Объяснение кода листинга программы
- Переменная
iинициализируется как 0 и используется для отслеживания текущего индекса. - Переменная
nинициализируется как -1 и используется для определения конца последовательности нулей. - Переменная
kинициализируется как -1 и используется для определения первого индекса последовательности нулей. - Переменная
aиспользуется для хранения каждого введенного числа. - Переменная
Lинициализируется как 0 и используется для подсчета количества нулей до текущего индекса. - Переменная
Ltинициализируется как 0 и используется для подсчета длины наибольшей последовательности нулей до текущего индекса. - Переменная
ntинициализируется как -1 и используется для хранения индекса первого нуля в текущей наибольшей последовательности. - Переменная
ktинициализируется как -1 и используется для хранения индекса последнего нуля в текущей наибольшей последовательности. - В цикле while(1) происходит считывание каждого числа с помощью функции
scanf(). Если число отрицательное, цикл прерывается. - Если число равно 0, то проверяется, является ли текущая последовательность нулей наибольшей. Если да, то обновляются значения переменных
nt,kt,Lt,L,nиk. - Если число не равно 0, то флаг устанавливается в 0, чтобы начать подсчет новой последовательности нулей.
- Переменная
iувеличивается на 1 после каждой итерации цикла. - Если
nменьше 0, то выводится сообщениеНет нулей. - Если
nбольше или равно 0, то выводится сообщениеBeg,EndиL, гдеBeg- это первый индекс,End- последний индекс иL- длина наибольшей последовательности. Следует отметить, что код не обрабатывает ошибки, связанные с вводом пользователя, и предполагает, что пользователь будет вводить только числа.