Пазлы Плюсы и Минусы - PullRequest
       17

Пазлы Плюсы и Минусы

0 голосов
/ 14 апреля 2020

Для заданного ввода 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)

`

...