2013-04-13 3 views
0

숫자 N과 배열이 주어지면? 다음 예제와 같이 N 배열을 배열하는 방법 :Java에서 배열 사이에 숫자를 배포

N = 5 및 크기가 4 인 배열;

[5,0,0,0] 
[0,5,0,0] 
[0,0,5,0] 
[0,0,0,5] 
[4,1,0,0] 
[4,0,1,0] 
[4,0,0,1] 
[1,4,0,0] 
[0,4,1,0] 
[0,4,0,1] 
[1,0,4,0] 
[0,1,4,0] 
[0,0,4,1] 
. 
.. 
.. 
[2,1,2,0] 
.. 
.. 
... 

에 중요한 것은 전체 배열의 합이 N이라는 것이다!

힐 클라이밍 알고리즘을 구현하여 모든 후계자를 생성 한 다음 힐 클라이밍이 목록에서 선택할 수 있도록하려고합니다.

+3

이 숙제입니까? 너 뭐 해봤 니? –

+0

아니 얘들 아, 그 프로젝트. 힐 클라이밍 알고리즘을 구현하여 모든 후계자를 생성하고 힐 클라이밍이 목록에서 선택할 수 있도록하려고합니다. – user2278223

+0

@ user2278223 해결 되었습니까? –

답변

0

재귀를 사용하거나 싫어하거나 긴 배열을 사용하면 재귀를 사용하지 마십시오. 당신은 arr을 채우고 싶습니다. 당신은 시작 부분 (0..index-1)을 채웠고 배열의 끝에 N을 채우고 싶습니다.

콜 (길이는 5) : fill (arr, 5, 0);

private static void fill(int[] arr, int N, int index) { 
    if (arr == null) { 
     return; 
    } 
    if (N == 0) { 
     for (; index < arr.length; index++) { 
      arr[index] = 0; 
     } 
    } else if (index == arr.length - 1) { 
     arr[index] = N; 
    } else { 
     for (int j = N; j >= 0; j--) { 
      arr[index] = j; 
      fill(arr, N - j, index + 1); 
     } 
    } 

    if (index >= arr.length - 1) { 
     // use your array 
     System.out.println(Arrays.toString(arr)); 
    } 
} 
+0

대단히 감사합니다 :) – user2278223

관련 문제