Не работает цикл. Pyton 3.9 , Windows 10

l17ronin

Новичок
Пользователь
Авг 7, 2021
1
0
1
// тестовый input:
2
7
10 7 4 6 8 10 11
4
9 7 5 3
// output должен быть:
Case #1: 4
Case #2: 4

// Проблема в :

for i in range(n - 1)
//ссылка на задание :https://codingcompetitions.withgoogle.com/kickstart/round/000000000019ff47/00000000003bf4ed#problem

Python:
t = int(input())
for yy in range(1,t + 1):
    n = int(input())
    a = [int(o) for o in input().split()]
    for i in range(n - 1):
        max_j = 0
        step = a[i + 1] - a[i]
        max_len = 0
        print(step)
        for j in range(n - 1):
            if a[j + 1] - a[j] == step:
                max_j += 1
                max_len = max(max_len, max_j+1)
    print(f'Case #{yy}: {max_len}')
 
Последнее редактирование:

Vershitel_sudeb

Vershitel sudeb
Команда форума
Модератор
Мар 17, 2021
933
208
43
20
Москва
Вставьте код как кодScreenshot_20210807-093951.jpg
 

stud_55

Модератор
Команда форума
Модератор
Апр 3, 2020
1 522
672
113
// Проблема в :
for i in range(n - 1)
Проблема в том, что значение переменной max_len перезаписывается на каждой итерации цикла и в результате в ответ попадает длина последней последовательности, а не самой длинной.
Чтобы решить проблему - можно объявить переменную max_len перед циклом:

Python:
t = int(input())
for yy in range(1,t + 1):
    n = int(input())
    a = [int(o) for o in input().split()]
    max_len = 0
    for i in range(n - 1):
        max_j = 0
        step = a[i + 1] - a[i]       
        print(step)
        for j in range(n - 1):
            if a[j + 1] - a[j] == step:
                max_j += 1
                max_len = max(max_len, max_j+1)
    print(f'Case #{yy}: {max_len}')

Еще можно улучшить алгоритм нахождения решения - убрать из него лишние циклы.
Оставить один цикл на последовательность вместо n + 1, где n - это длина последовательности:
Python:
t = int(input())
for y in range(t):
    n = int(input())
    a = [int(o) for o in input().split()]
    step = 0
    max_len = 0
    cur_len = 1
    for i in range(1, n):
        cur_len = cur_len + 1 if step == a[i - 1] - a[i] else 1
        max_len = max(cur_len, max_len)
        step = a[i - 1] - a[i]
    print(f'Case #{y + 1}: {max_len + 1}')
 
  • Мне нравится
Реакции: l17ronin

Форум IT Специалистов