도전
문제는 양의 정수 'n'을 입력으로 사용하고 1에서 n까지의 숫자를 쓸 수있는 모든 가능한 방법을 표시하는 코드를 작성하는 것입니다. 0과 같습니다. 더하기 또는 빼기 만 사용할 수 있습니다.
예를 들어, 입력이 3이면 합계를 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이되는 가능한 모든 방법이 포함되어야합니다. 동일한 방법 으로 가능한 방법이 없으면 원하는 것을 출력 할 수 있습니다 .
또한 원하는 형식으로 출력을 인쇄 할 수 있습니다 . 그러나 이해할 수 있어야합니다 . 예를 들어 위의 예와 같이 인쇄 할 수 있습니다. 또는 숫자의 부호를 순서대로 인쇄하면됩니다. 그렇지 않으면 '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
채점
이것은 code-golf 이므로 가장 짧은 코드가 승리합니다!
+
로 N
와 -
같은 -N
, 또는 너무 멀리 그것을 복용하는 것이 무엇입니까? (예 3
-> [[-3,-3,3], [3,3,-3]]
)
0
and 1
옵션을 의미 하지만 N
and를 사용합니다 -N
(위의 편집 내용 참조)