Уведомления

Группа в Telegram: @pythonsu

#1 Март 10, 2020 17:58:07

ElmarB
Зарегистрирован: 2020-02-24
Сообщения: 19
Репутация: +  0  -
Профиль   Отправить e-mail  

Задания МФТИ, лекция 6

Здравствуйте

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

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

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

Не понимаю как найти максимальное количество 1, идущих подряд.

Офлайн

#2 Март 10, 2020 18:19:17

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Задания МФТИ, лекция 6

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



Офлайн

#3 Март 10, 2020 19:16:34

ElmarB
Зарегистрирован: 2020-02-24
Сообщения: 19
Репутация: +  0  -
Профиль   Отправить e-mail  

Задания МФТИ, лекция 6

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)


Отредактировано FishHook (Март 10, 2020 19:51:08)

Офлайн

#4 Март 10, 2020 19:21:32

ElmarB
Зарегистрирован: 2020-02-24
Сообщения: 19
Репутация: +  0  -
Профиль   Отправить e-mail  

Задания МФТИ, лекция 6

Как-то криво я залил только. Надеюсь понятно

Офлайн

#5 Март 11, 2020 16:04:36

ElmarB
Зарегистрирован: 2020-02-24
Сообщения: 19
Репутация: +  0  -
Профиль   Отправить e-mail  

Задания МФТИ, лекция 6

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

Офлайн

#6 Фев. 19, 2021 01:09:58

doraroro
Зарегистрирован: 2021-02-19
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

Задания МФТИ, лекция 6

Моя версия решения.Может кому понадобится. Алсо, лекции не смотрел, писал при помощи гугла и той-то матери

 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))
 

Офлайн

#7 Март 1, 2021 00:10:56

doraroro
Зарегистрирован: 2021-02-19
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

Задания МФТИ, лекция 6

Версия на циклах

 # Переменные
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)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version