Для заданного ввода n в строке генерируются последовательные целые числа от 1 до n. Напишите код так, чтобы алгоритм помещал «+» и «-» перед каждым элементом, чтобы полученное выражение было равно 0 или, если задание невозможно выполнить, верните сообщение «нет решения». Ваш алгоритм должен быть намного эффективнее, чем изучение всех возможных способов размещения знаков.
Вот мое решение: Допустим, n = 4. Сгенерированная последовательность составляет 1,2,3,4. SumOfSequence = 10, что является четным, то есть решение существует. Сортируйте последовательность в два списка так, чтобы у каждого была сумма, равная половине SumOfSequence. Поиск по последнему индексу, выберите 4, отклонить 3, отклонить 2, выберите 1, прервать. Выбранные элементы получают знак плюс и оставшийся минус или наоборот.
Код, который я пробовал, приведен ниже, но мне было интересно, если какой-либо другой подход сделать то же самое. Спасибо за код и несколько строк объяснения, спасибо.
`
n=int(input("Enter the value of n: "))
total=temp=0
for i in range(1,n+1):
total+=i
if total%2 != 0:
print("No solution.")
else:
sequence=[]
half_of_total=int(total/2)
for i in range(1,n+1):
sequence.append(i)
pos_elements=[]
i=n-1
while i>=0:
if temp==half_of_total:
break
else:
if sequence[i]+temp>half_of_total:
i=i-1
else:
temp=temp+sequence[i]
pos_elements.append(sequence[i])
i=i-1
for x in sequence:
if x in pos_elements:
print("+", x)
else:
print("-", x)
`