Python

Python code Помогите решить задачу

Имеется массив целых чисел numbers. Необходимо найти все последовательности в массиве (подряд стоящие числа), сумма которых равна заданному числу S.

Пример: nums = [4,-1,7,0,1,2,-1,5], S = 3, последовательности: [4, -1], [0, 1, 2], [1, 2]
P.S. - объясните, каждое действие
 A = [int(i) for i in input('A: ').split()] 
B, S, lena = [], int(input('S: ')), len(A)
for i in range(lena):
for j in range(i, lena):
C = A[i: j + 1]
if sum(C) == S: B.append(C)
print(*B)
A - список целых чисел, вводимых в одну строку через пробел. C - это текущий срез списка А, а В - это список всех подходящих срезов. Это если одиночный элемент тоже образует последовательность с суммой, равной значению этого элемента. Но если последовательность состоит обязательно больше чем из одного элемента, тогда надо так:
 A = [int(i) for i in input('A: ').split()] 
B, S, lena = [], int(input('S: ')), len(A)
for i in range(lena):
for j in range(i, lena):
C = A[i: j + 1]
if sum(C) == S and len(C) > 1: B.append(C)
print(*B)
Хомяков Виталий
Хомяков Виталий
66 572
Лучший ответ
написать можно, объяснять нет
Kozy Korpew Suteev
Kozy Korpew Suteev
20 491
>>>
Сергей Осипов
Сергей Осипов
5 840
 def find_sequences(numbers, S): 
sequences = []
current_sequence = []
current_sum = 0

for num in numbers:
current_sum += num
current_sequence.append(num)

while current_sum > S:
current_sum -= current_sequence[0]
current_sequence = current_sequence[1:]

if current_sum == S:
sequences.append(current_sequence[:])

return sequences

nums = [4, -1, 7, 0, 1, 2, -1, 5]
S = 3

result = find_sequences(nums, S)
print(result)
Объяснение кода:

1-Создаем функцию find_sequences, которая принимает массив numbers и число S.
2-Создаем переменные sequences, current_sequence и current_sum. sequences будет содержать все найденные последовательности, current_sequence будет использоваться для формирования текущей последовательности, а current_sum будет отслеживать текущую сумму чисел в последовательности.
3-Проходим по каждому числу num в массиве numbers.
4-Добавляем текущее число num к current_sum и current_sequence.
5-Если текущая сумма current_sum становится больше заданного числа S, то удаляем первое число из current_sequence и уменьшаем current_sum на его значение. Это помогает сократить длину последовательности и сумму до значения, меньшего или равного S.
6-Если текущая сумма current_sum становится равной S, добавляем копию текущей последовательности current_sequence в массив sequences.
7-Возвращаем массив sequences.
8-Задаем исходный массив nums и число S.
9-Вызываем функцию find_sequences с этими параметрами и сохраняем результат в переменную result.
10-Выводим результат.
При выполнении кода, результатом будет [[-1, 4], [0, 1, 2], [1, 2]], что соответствует найденным последовательностям с суммой, равной 3.