@Jungles
Молодой и зелёный

Алгоритм для нахождения прогрессии?

задача - вводится последовательность чисел , нужно найти наибольшее кол-во, подряд идущих чисел образующих арифметическую прогрессию.
написал такое, но код работает очень не уверенно, пробовал вычитать разные числа,менять последовательность, но правильного ответа так и не нашел =(
spoiler
list_number = []
while True:
    a = int(input())
    
    if a == 0:
        break
    else:
        list_number.append(a)

count_max = 0
count_list = []

for i in range(0,len(list_number)-2):
    if list_number[i+1] > list_number[i]:
        d = abs(list_number[i+1] - list_number[i])
    else:
        d = list_number[i+1] - list_number[i]
    for j in range((i+1), len(list_number)-2):
        if list_number[j] + d == list_number[j+1]:
            if  j == (len(list_number)-1):
                if list_numberj+1] + d == list_number[j+2]:
                    count_max += 1
        else:
            counter.append(count_max)
            count_max = 0
            break

        
    count_list.append(count_max)
    count_max = 0
        
print(max(list_count))


можно проверить на этих примерах

a) 3; 6; 9; 12; 15; 17
b) 1; 12; 23; 34; 45
c) −5; −1; 3; 7; 11; 15
d) −6; 5; 17; 28; 39
e)3; 6; 9; 12; 15; 18
  • Вопрос задан
  • 110 просмотров
Решения вопроса 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Питона не знаю, пишу псевдокодом:
delta = arr[1] - arr[0]
max_count = 2
count = 2
for (i = 1; i < length(arr)-1; i += 1) {
  if (arr[i+1] - arr[i] == delta) {
    count += 1
  } else {
    delta = arr[i+1] - arr[i]
    count = 2
  }
  if (count > max_count) {
    max_count = count
  }
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы