Форум сайта python.su
Здравствуйте
Задача
Вводится последовательность, состоящая только из 0 и 1. Необходимо найти максимальное количество 1, идущих подряд (без 0 между ними).
Формат входных данных
В первой строке задается натуральное N<=10000 , длина массива, далее идут N чисел 0 или 1 – элементы массива. Каждое число вводится с новой строки.
Формат выходных данных
Одно число — результат.
Не понимаю как найти максимальное количество 1, идущих подряд.
Офлайн
ElmarBБез компьютера вы можете это сделать? Запишите на бумажку ваши действия, потом переведите алгоритм в нужный язык программирования.
Не понимаю как найти максимальное количество 1, идущих подряд.
Офлайн
FishHook
N = int(input()) if N <=10000: A = [0]*N qty = 0 i = 0 for k in range (N): A[k] = int(input()) if A[k] == 1: i += 1 if i > qty: qty = i if A[k] == 0: i = 0
Отредактировано FishHook (Март 10, 2020 19:51:08)
Офлайн
Как-то криво я залил только. Надеюсь понятно
Офлайн
Задача,
На вход программа получает набор чисел, заканчивающихся решеткой. Вам требуется найти: среднее, максимальное и минимальное число в последовательности. Так же нужно вывести cумму остатков от деления суммы троек на последнее число тройки (каждые 3 введеных числа образуют тройку).
Для понимания рассмотрим пример входных данных: 1 2 3 4 5 6 среднее: (1 + 2 + 3 + 4 + 5 + 6) / 6 = 3.5 максимум: 6 минимум: 1 сумма остатков троек: (1 + 2 + 3) mod 3 + (4 + 5 + 6) mod 6 = 6 mod 3 + 15 mod 6 = 0 + 3 = 3
Среднее выводить, округлив до трех знаков после запятой. Для этого нужно использовать функцию round(x, 3)
Того ваша программа должна вывести: 3.5 6 1 3
Подумайте, имеет ли смысл хранить всю последовательность.
Формат входных данных
Последовательность чисел, заканчивающися ‘#’. Все числа от 1 до 100. Количество чисел в последовательности кратно трем. Одно число на строку.
Формат выходных данных
Четыре числа, разделенных пробелом.
Написал вот такой код, но ощущение, что это плохой и плохо читаем код в котором я сам могу запутаться, не отпускает. Так же не понимаю как закончить цикл решеткой ‘#’.
Что скажите?
n = 0 # количество введенных чисел the_sum = 0 the_max = 0 the_min = 100 k = 0 #сумма 3х чисел каторая будет делится по модулю 3*р N = int(input()) the_sum += N k += N if N > the_max: the_max = N if N < the_min: the_min = N i = 1 # счетчик каторый обновляется на 0 через каждые 3 числа m = 0 # остаткот 3х чисел sum_mod3 = 0 # сумма остатков 3х чисел p = 1 # умножитель модуля каторый увеличивается на 1 каждые 3 числа while N > 0 and N < 100: N = int(input()) if N==0: break n += 1 the_sum += N # сумма всех чисел k += N i += 1 if i == 3: m = k %(3*p) # остаткот 3х чисел i = 0 # счетчик каторый обновляется на 0 k = 0 # сброс суммы 3х чисел на 0 sum_mod3 += m # сумма остатков 3х чисел p += 1 # умножитель модуля каторый увеличивается на 1 if N > the_max: the_max = N if N < the_min: the_min = N mean = the_sum/(n+1) # среднее print(round(mean, 3), the_max, the_min, sum_mod3)
Отредактировано FishHook (Март 11, 2020 16:11:42)
Офлайн
Моя версия решения.Может кому понадобится. Алсо, лекции не смотрел, писал при помощи гугла и той-то матери
l = [] x = 0 s = 0 j = 0 while x != "#": x = input() if x != '#': l.append(x) lenL = int(len(l)) for i in range(lenL): s += int(l[i]) avr = s / lenL group = int(lenL/3) a = [0]*group b = [0]*group m = [0]*group for i in range(group): a[i] = int(l[j])+int(l[j+1])+int(l[j+2]) b[i]= l[j+2] m[i] = int(a[i])% int(b[i]) j += 3 print(round(avr, 3), max(l, key = lambda i: int(i)), min(l, key = lambda i: int(i)), sum(m))
Офлайн
Версия на циклах
# Переменные numList =[] numIn = 0 sumList = 0 sumThree = 0 modThreeList = [] sumModThree = 0 # Ввод чисел while numIn != '#': numIn = input() numList.append(numIn) numList.pop() # Получаем сумму списка for i in range(len(numList)): sumList += int(numList[i]) # Среднее averageSumList = sumList/ len(numList) # Максимум списка maxNum = int(numList[0]) for i in range(1,len(numList)): if int(numList[i]) > maxNum: maxNum = int(numList[i]) # Минимум списка minNum = int(numList[0]) for i in range(1,len(numList)): if int(numList[i]) < minNum: minNum = int(numList[i]) # Остаток деления от троек while len(numList) != 0: for i in range(3): a = int(numList.pop(0)) sumThree += a modThree = sumThree % a modThreeList.append(modThree) sumThree = 0 # Сумма остатков for i in range(len(modThreeList)): sumModThree += int(modThreeList[i]) # Выводим ответ print(round(averageSumList,3), maxNum, minNum, sumModThree)
Офлайн