Уведомления

Группа в Telegram: @pythonsu

#1 Июль 18, 2016 14:26:11

Straik32423
От: Ростов-на-Дону, Россия
Зарегистрирован: 2016-05-18
Сообщения: 46
Репутация: +  0  -
Профиль   Отправить e-mail  

Задача с pythontutor

Привет. Помогите решить задачу.
Дана последовательность натуральных чисел, завершающаяся числом 0. Определите, какое наибольшее число подряд идущих элементов этой последовательности равны друг другу.

Офлайн

#2 Июль 18, 2016 15:33:16

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9773
Репутация: +  844  -
Профиль   Отправить e-mail  

Задача с pythontutor

Нужно две переменные: одна - под максимальное число равных элементов, другая - под текущее число равных элементов. И нужно ещё одну переменную под предыдущий элемент.

Берёшь каждый элемент, сравниваешь его с предыдущим и там три ситуации:
1) Элемент - ноль. Нужно сравнить максимальное число с текущим числом и заменить максимальное на текущее, если текущее больше максимального.
2) Элемент - не ноль и равен предыдущему элементу. Увеличить текущее число.
3) Элемент - не ноль и не равен предыдущему элементу. Сравнить максимальное число с текущим числом и заменить максимальное на текущее, если текущее больше максимального. Установить текущее число в 1.



Отредактировано py.user.next (Июль 18, 2016 15:50:06)

Офлайн

#3 Июль 19, 2016 13:35:03

Straik32423
От: Ростов-на-Дону, Россия
Зарегистрирован: 2016-05-18
Сообщения: 46
Репутация: +  0  -
Профиль   Отправить e-mail  

Задача с pythontutor

py.user.next
Нужно две переменные: одна - под максимальное число равных элементов, другая - под текущее число равных элементов. И нужно ещё одну переменную под предыдущий элемент.Берёшь каждый элемент, сравниваешь его с предыдущим и там три ситуации:1) Элемент - ноль. Нужно сравнить максимальное число с текущим числом и заменить максимальное на текущее, если текущее больше максимального.2) Элемент - не ноль и равен предыдущему элементу. Увеличить текущее число.3) Элемент - не ноль и не равен предыдущему элементу. Сравнить максимальное число с текущим числом и заменить максимальное на текущее, если текущее больше максимального. Установить текущее число в 1.

Спасибо, почти получилось. Результат правильный практически при всех последовательностях, кроме двух. Помогите, пожалуйста, найти ошибку.
 i = -1
k = -1
e = 1
max = 1
while i != 0:
    i = int(input())
    if i == k:
        e += 1
    else:
        if e > max:
            max = e
            e = 0
    k = i
print(max)

Вот список цифр, при которых результат неверный. Выводит 3 вместо 4…

1
2
3
2
3
3
2
4
4
4
4
2
3
3
3
2
2
3
0

Отредактировано Straik32423 (Июль 19, 2016 13:37:06)

Офлайн

#4 Июль 19, 2016 15:05:06

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9773
Репутация: +  844  -
Профиль   Отправить e-mail  

Задача с pythontutor

  
>>> def f(seq):
...     prev = curn = maxn = 0
...     for e in seq:
...         if e == prev:
...             curn += 1
...         else:
...             if curn > maxn:
...                 maxn = curn
...             curn = 1
...         prev = e
...     return maxn
... 
>>> f([1, 1, 2, 2, 2, 3, 3, 0])
3
>>>



Отредактировано py.user.next (Июль 19, 2016 15:07:24)

Офлайн

#5 Июль 20, 2016 18:34:02

Stepan_M
Зарегистрирован: 2016-07-20
Сообщения: 31
Репутация: +  1  -
Профиль   Отправить e-mail  

Задача с pythontutor

py.user.next
 >>> def f(seq):
...     prev = curn = maxn = 0
...     for e in seq:
...         if e == prev:
...             curn += 1
...         else:
...             if curn > maxn:
...                 maxn = curn
...             curn = 1
...         prev = e
...     return maxn
... 
>>> f([1, 1, 2, 2, 2, 3, 3, 0])
3
>>>
Но если
 >>> f([1])
0
>>> f([1,2,2,3,3,3])
2
>>>
Не везде правильно как бы.
Мой вариант.
 previous = count = max_count = 0
flag_equal = False
print("Input numbers. 0 - end:")
current = int(input())
if current:
    count = max_count = 1
    previous = current
    current = int(input())
    while current:
        if current == previous:   
            count += 1            
            flag_equal = True
        else:                     
            if count > max_count: 
                max_count = count
            count = 1
            flag_equal = False
        previous = current
        current = int(input())
        
    if flag_equal and (count > max_count):
        max_count = count
print("Maximum count of equal numbers:", max_count)

Офлайн

#6 Июль 20, 2016 20:20:17

marvellik
Зарегистрирован: 2016-05-15
Сообщения: 639
Репутация: +  73  -
Профиль   Отправить e-mail  

Задача с pythontutor

это эталонное решение

 prev = -1
curr_rep_len = 0
max_rep_len = 0
element = int(input())
while element != 0:
    if prev == element:
        curr_rep_len += 1
    else:
        prev = element
        max_rep_len = max(max_rep_len, curr_rep_len)
        curr_rep_len = 1
    element = int(input())
max_rep_len = max(max_rep_len, curr_rep_len)
print(max_rep_len)
я как то решил так
 p=int(input())
c=1
b=0
while p!=0:
    v=int(input())
    p,v=v,p
    if v==p:
        c+=1
    if c>b:
        b=c
    if p!=v:
        c=1
print(b)

Офлайн

#7 Июль 21, 2016 03:12:11

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9773
Репутация: +  844  -
Профиль   Отправить e-mail  

Задача с pythontutor

Stepan_M
Но если
  
>>> f([1])
0
>>>
Условие не читал? Там сказано, что последовательность состоит из натуральных чисел (целые числа больше нуля) и заканчивается нулём, и это всегда так. Это предусловие. То есть функция не должна проверять их натуральность или наличие нуля в конце, соблюдение этого условия лежит на вызывающем.



Отредактировано py.user.next (Июль 21, 2016 03:13:25)

Офлайн

#8 Июль 21, 2016 09:51:14

Stepan_M
Зарегистрирован: 2016-07-20
Сообщения: 31
Репутация: +  1  -
Профиль   Отправить e-mail  

Задача с pythontutor

py.user.next
Stepan_M
Но если

     >>> f([1])
    0
    >>>
    


Условие не читал? Там сказано, что последовательность состоит из натуральных чисел (целые числа больше нуля) и заканчивается нулём, и это всегда так. Это предусловие. То есть функция не должна проверять их натуральность или наличие нуля в конце, соблюдение этого условия лежит на вызывающем.

Виноват, в таком случае действительно f отрабатывает верно. Прошу извинения, увлекся проверками.

Отредактировано Stepan_M (Июль 21, 2016 09:54:37)

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version