Найти - Пользователи
Полная версия: Задания МФТИ, лекция 6
Начало » Python для новичков » Задания МФТИ, лекция 6
1
ElmarB
Здравствуйте

Задача
Вводится последовательность, состоящая только из 0 и 1. Необходимо найти максимальное количество 1, идущих подряд (без 0 между ними).

Формат входных данных
В первой строке задается натуральное N<=10000 , длина массива, далее идут N чисел 0 или 1 – элементы массива. Каждое число вводится с новой строки.

Формат выходных данных
Одно число — результат.

Не понимаю как найти максимальное количество 1, идущих подряд.
FishHook
ElmarB
Не понимаю как найти максимальное количество 1, идущих подряд.
Без компьютера вы можете это сделать? Запишите на бумажку ваши действия, потом переведите алгоритм в нужный язык программирования.
ElmarB
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

print(qty)


ElmarB
Как-то криво я залил только. Надеюсь понятно
ElmarB
Задача,
На вход программа получает набор чисел, заканчивающихся решеткой. Вам требуется найти: среднее, максимальное и минимальное число в последовательности. Так же нужно вывести 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)
doraroro
Моя версия решения.Может кому понадобится. Алсо, лекции не смотрел, писал при помощи гугла и той-то матери
 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))
 
doraroro
Версия на циклах
 # Переменные
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)
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB