Найти - Пользователи
Полная версия: Задача с pythontutor
Начало » Центр помощи » Задача с pythontutor
1
Straik32423
Привет. Помогите решить задачу.
Дана последовательность натуральных чисел, завершающаяся числом 0. Определите, какое наибольшее число подряд идущих элементов этой последовательности равны друг другу.
py.user.next
Нужно две переменные: одна - под максимальное число равных элементов, другая - под текущее число равных элементов. И нужно ещё одну переменную под предыдущий элемент.

Берёшь каждый элемент, сравниваешь его с предыдущим и там три ситуации:
1) Элемент - ноль. Нужно сравнить максимальное число с текущим числом и заменить максимальное на текущее, если текущее больше максимального.
2) Элемент - не ноль и равен предыдущему элементу. Увеличить текущее число.
3) Элемент - не ноль и не равен предыдущему элементу. Сравнить максимальное число с текущим числом и заменить максимальное на текущее, если текущее больше максимального. Установить текущее число в 1.
Straik32423
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
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
>>>
Stepan_M
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)
marvellik
это эталонное решение
 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)
py.user.next
Stepan_M
Но если
  
>>> f([1])
0
>>>
Условие не читал? Там сказано, что последовательность состоит из натуральных чисел (целые числа больше нуля) и заканчивается нулём, и это всегда так. Это предусловие. То есть функция не должна проверять их натуральность или наличие нуля в конце, соблюдение этого условия лежит на вызывающем.
Stepan_M
py.user.next
Stepan_M
Но если

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


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

Виноват, в таком случае действительно f отрабатывает верно. Прошу извинения, увлекся проверками.
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