입력 : 어레이 I 의 (K) 양수. 정수는 100보다 크지 않고 k ≤ 100 입니다.
출력 : 코드는 길이가 k 인 음이 아닌 정수의 가능한 모든 배열 O 를 0 ≤ O i ≤ I i로 제한하여 출력해야합니다 . 한 배열에서 다음 배열로 가져 오려면 배열에서 1에서 하나의 값을 더하거나 뺄 수 있습니다. 코드는 동일한 배열을 두 번 출력해서는 안됩니다. 출력 할 여러 배열의 수가 매우 많은 경우 코드는 종료 될 때까지 계속 출력해야합니다.
예
경우 내가 의 배열입니다 K의 사람이 다음이 바로 모든 반복의 문제 그레이 코드 폭 비트의 K 제 마지막 요소는 한 번에 연결할 수 필요가없는 것을 제외하고.
그렇다면
I = [2,1]
출력 배열의 가능한 순서는 다음과 같습니다.(0,0),(0,1),(1,1),(1,0),(2,0),(2,1)
- 그렇다면
I = [2,1,3]
출력 배열 중 하나의 가능한 순서는(0,0,0),(0,0,1),(0,0,2),(0,0,3),(0,1,3),(0,1,2),(0,1,1),(0,1,0),(1,1,0),(1,1,1),(1,1,2),(1,1,3),(2,1,3),(2,1,2),(2,1,1),(2,1,0),...
입니다.
이것은 가장 짧은 길이의 소스 코드로 제출하면 코드 골프 도전입니다. 골프 언어로 된 짧은 답변이 다른 언어로 답변을 게시하지 못하게하지 마십시오. 어떤 언어로든 가장 짧은 대답을 생각해보십시오.
이것은 또한 복잡한 문제입니다. 모든 새로운 배열은 이전에 출력 된 배열 (또는 첫 번째 배열에 대한 프로그램의 시작 ) 이후 O (k) 시간이 경과 하여 출력되어야합니다 . 즉, 새 출력 배열 당 실행 시간 (각 길이는 k )이 O (k) 이하 여야합니다 . 즉 , 예를 들어 k 2 또는 2 k가 아닌 k에 비례하는 시간을 가져야합니다 . 이것은 출력 당 평균 시간이 아니라 출력 된 각 어레이에 대한 최악의 시간입니다.
64 비트 정수에 대한 모든 산술은 상수를 읽고 출력 할 수있을뿐만 아니라 배열에서 값을 할당하고 조회하고 변경할 수있는 일정한 시간에 수행 될 수 있다고 가정 할 수 있습니다.
복잡성이 제한된 결과 중 하나는 프로그램 종료시 출력 만 가능한 솔루션이 허용되지 않는다는 것입니다.
n
하고 k
제한된다? 그들이 비트 폭이 무한대로 갈 가정하고 어떻게 이동
I_i+1
??에서 0에 도달 할 수 있습니까I_i
?)