Виклик
Завдання полягає в тому, щоб написати код, який приймає позитивне ціле число 'n' як вхідний і відображає всі можливі способи, якими можна записати числа від 1 до n, з позитивним або негативним знаком між ними, таким чином, щоб їх сума була дорівнює нулю. Пам'ятайте, що ви можете використовувати лише додавання чи віднімання.
Наприклад, якщо вхід дорівнює 3, то існує 2 способи зробити суму 0:
1+2-3=0
-1-2+3=0
Зауважте, що числа в порядку, починаючи від 1 до n (що в цьому випадку 3). Як видно з прикладу, знак першого числа також може бути негативним, тому будьте уважні.
Тепер 3 було досить просто. Перелічимо всі способи, коли ми розглянемо число 7.
1+2-3+4-5-6+7=0
1+2-3-4+5+6-7=0
1-2+3+4-5+6-7=0
1-2-3-4-5+6+7=0
-1+2+3+4+5-6-7=0
-1+2-3-4+5-6+7=0
-1-2+3+4-5-6+7=0
-1-2+3-4+5+6-7=0
Отже, тут у нас є 8 можливих способів.
Вхід і вихід
Як було сказано раніше, вхід буде цілим числом . Ваш вихід повинен містити всі можливі способи, в яких числа дають суму нуля. Якщо немає можливості зробити те ж саме, ви можете вивести все, що завгодно.
Також ви можете надрукувати вихід у будь-якому форматі, який вам подобається . Але, це повинно бути зрозуміло . Наприклад, ви можете роздрукувати його, як у наведеному вище прикладі. Або ви можете просто надрукувати знаки цифр по порядку. В іншому випадку ви також можете надрукувати "0" та "1" у порядку, де "0" відображатиме негативний знак, а "1" - позитивний (або навпаки).
Наприклад, ви можете представити 1 + 2-3 = 0, використовуючи:
1+2-3=0
1+2-3
[1,2,-3]
++-
110
001
Однак я б рекомендував використовувати будь-який з перших трьох форматів для простоти. Ви можете вважати, що всі вхідні дані є дійсними.
Приклади
7 ->
1+2-3+4-5-6+7=0
1+2-3-4+5+6-7=0
1-2+3+4-5+6-7=0
1-2-3-4-5+6+7=0
-1+2+3+4+5-6-7=0
-1+2-3-4+5-6+7=0
-1-2+3+4-5-6+7=0
-1-2+3-4+5+6-7=0
4 ->
1-2-3+4=0
-1+2+3-4=0
2 -> -
8 ->
1+2+3+4-5-6-7+8=0
1+2+3-4+5-6+7-8=0
1+2-3+4+5+6-7-8=0
1+2-3-4-5-6+7+8=0
1-2+3-4-5+6-7+8=0
1-2-3+4+5-6-7+8=0
1-2-3+4-5+6+7-8=0
-1+2+3-4+5-6-7+8=0
-1+2+3-4-5+6+7-8=0
-1+2-3+4+5-6+7-8=0
-1-2+3+4+5+6-7-8=0
-1-2+3-4-5-6+7+8=0
-1-2-3+4-5+6-7+8=0
-1-2-3-4+5+6+7-8=0
Оцінка балів
Це код-гольф , тому найкоротший код виграє!
+
як N
і -
як -N
, чи це занадто далеко? (напр. 3
-> [[-3,-3,3], [3,3,-3]]
)
0
і 1
варіант, але використовуючи N
і -N
(див. Мою редакцію вище)