2016-12-01 1 views
0

제 함수에서 주어진 배열에서 주어진 수 K에 모든 고유 한 삼중 항을 찾아야합니다. 모든 트리플렛을 찾았지 만 그 중 많은 수가 두 번 이상 같은 경우 1 1 51 5 1 또는 5 1 1 등과 같습니다.고유 한 삼중 항 찾기

누군가가 도와 줄 수 있습니까?

int triplet(int *array, int size, int K) { 
    int i, j, k; 
    int found = 0; /* triplets whose sum is equal to K */ 
    for(i = 0; i < size; i++) { 
    for (j = 0; j < size; j++) {  
     for (k = 0; k < size; k++) { 
     if(array[i] + array[j] + array[k] == K) { 
      printf("Triplet Found : %d, %d, %d\n", array[i], array[j], array[k]); 
      found++; 
     }   
     } 
    } 
    } 
    return found; 
} 

답변

0

이미 처리 된 조합을 반복해서는 안됩니다. 가능한 솔루션과 같이, 드 이전 ID + 1주기에 대한 각을 시작하는 것입니다 : 당신이 동일한 요소의 세 쌍둥이를 방지 j = i + 1; 설정

for(i = 0; i < size; i++) { 
for (j = i+1; j < size; j++) {  
    for (k = j+1; k < size; k++) { 
    if(array[i] + array[j] + array[k] == K) { 
     printf("Triplet Found : %d, %d, %d\n", array[i], array[j], array[k]); 
     found++; 
    }   
    } 
} 

!

+0

OP (1 1 5) –

+0

에서 제공하는 예제에서'id + 1'을 사용하면 작동하지 않을 것입니다. 출력이 아닌 입력이라고 생각하면 작동합니다 : – Giovazz89

+0

array [0] + array [1] + 배열 [2] == K – Giovazz89

0

다음과 같은 변화를 시도 할 수 조합을 제외하려면 :

int triplet(int *array, int size, int K) { 
    int i, j, k; 
    int found = 0; /* triplets whose sum is equal to K */ 
    for(i = 0; i < size; i++) { 
    for (j = i; j < size; j++) {  
     for (k = j; k < size; k++) { 
     if(array[i] + array[j] + array[k] == K) { 
      printf("Triplet Found : %d, %d, %d\n", array[i], array[j], array[k]); 
      found++; 
     }   
     } 
    } 
    } 
    return found; 
} 

을 주목 for loop 선언에 j = ik = j 문. 이 방법을 사용하면 가능한 중복 사례를 무시하고 i, jk 개의 변수를 모두 포함 할 수 있습니다.

관련 문제