2014-04-19 6 views
-9

다음 상황을 고려하십시오. 정수 k와 n의 정수가 하나 있다고 가정하십시오. 이제 우리는 이러한 데이터에 대해 숫자의 하위 집합의 합으로 k 수를 얻을 수 있는지 결정할 함수를 작성해야합니다. 재귀 적으로 작동해야합니다. 예를 들어, 입력의 : 복사 할 수있는 경우숫자를 지정된 값으로 합산합니다.

IN: 
k: 12 
14 25 36 8 78 15 26 
OUT: 
NO 
k: 118 
14 25 36 8 78 15 26 1 2 7 
YES, 78+14+26 
+1

-1 무엇이 문제입니까? (어쨌든, google up partitioning) –

+0

당신이 우연히 발견 한 것은 [배낭 문제] (http://en.wikipedia.org/wiki/Knapsack_problem)입니다. – fredoverflow

+0

시도한 코드를 게시하면 도움을 드릴 수 있습니다! – Luigi

답변

0

은/어떤 맥락없이 할당/면접 질문을 붙여, 나는 웹 솔루션과 동일한 기능을 수행 할 수 있습니다 ...

/* Returns true if the there is a subarray of arr[] with sum equal to 'sum' 
    otherwise returns false. Also, prints the result */ 
int subArraySum(int arr[], int n, int sum) 
{ 
    int curr_sum, i, j; 

    // Pick a starting point 
    for (i = 0; i < n; i++) 
    { 
     curr_sum = arr[i]; 

     // try all subarrays starting with 'i' 
     for (j = i+1; j <= n; j++) 
     { 
      if (curr_sum == sum) 
      { 
       printf ("Sum found between indexes %d and %d", i, j-1); 
       return 1; 
      } 
      if (curr_sum > sum || j == n) 
       break; 
      curr_sum = curr_sum + arr[j]; 
     } 
    } 

    printf("No subarray found"); 
    return 0; 
} 

출처 : http://www.geeksforgeeks.org/find-subarray-with-given-sum/

추신 : 의견을 말할만한 점수가 충분하지 않습니다.

관련 문제