2015-01-13 2 views
0

다시 한 번 도움을 요청하는 임. 이번에 나는 인터넷에서 발견 한 작업의 한가운데서 자신을 발견했고 좋은 해결책을 찾지 못했습니다. 처음에는 버블 정렬을 생각했지만 다차원 배열과 함께 사용하는 방법을 찾지 못했습니다. 작업은 두 번째 배열에서 반복되지 않는 3 개의 가장 작은 요소를 찾도록 요청합니다. 지금까지는 제 코드가 이렇게 보였습니다. 필자는 그것을 많이 제거했지만 ... 아주 잘못되고 쓸모없는 것이었기 때문에.다차원 배열에서 가장 작은 요소 찾기

모든 것이 C로 작성되었습니다. 도움을 주셔서 감사합니다.

3 

1 2 3 

3 3 3 

3 3 3 

5 4 6 

6 4 5 

4 5 6 

는 최소 및 배열에서의 위치 찾으려면 파일

#include stdio.h 
#include stdlib.h 

int main() 
{ 
    FILE *fptr; 
    fptr = fopen("Duomenys.txt", "r"); 
    int i, j; 
    int k, l; 
    int bubbleTmp; 
    fscanf(fptr, "%d ", &k); 
    l = k; 
    int a[k][k]; 
    int b[k][k]; 

    for(i = 0; i < k; i++) 
    { 
     for(j = 0; j < l; j++) 
     { 
      fscanf(fptr,"%d ",&a[i][j]); 
      printf("%d ", a[i][j]); 
     } 
     printf("\n"); 
    } 

    printf("\n\n\n"); 

    for(i = 0; i < k; i++) 
    { 
     for(j = 0; j < l; j++) 
     { 
      fscanf(fptr,"%d ",&b[i][j]); 
      printf("%d ", b[i][j]); 
     } 
     printf("\n"); 
    } 

    // Bubble Sort 
    for(i = 0; i < k; i++) 
    { 
     for(j = 0; j < l; j++) 
     { 
      if(a[i][j] > a[i][j+1]) 
      { 

      } 
     } 
    } 


    fclose(fptr); 
    return 0; 
} 
+0

입력 파일 또는 부품을 게시하십시오. –

+0

C로 작성되었으므로 C++ 11 태그가 필요한 이유는 무엇입니까? – crashmstr

+0

C++ 사용자가 코드를 이해한다고 가정했습니다. 가장 낮은 회원을 찾은 뒤에 기본 논리를 찾으려고 노력 중입니다. 아프게 그것을 제거하십시오, 죄송합니다. – Trimadix

답변

0

에 주어진 정보입니다 : 첫 번째 시도 후

int min = a[0][0], i_min = 0, j_min = 0; 

for(i = 0; i < k; i++) 
    { 
     for(j = 0; j < l; j++) 
     { 
      if(a[i][j] < min) 
      { 
       min = a[i][j]; 
       i_min = i; 
       j_min = j; 
      } 
     } 
    } 

을, 당신은 두 번 더 반복 발견 된 최소값을 피하십시오. 각 최소값의 위치는 알려져 있습니다.

+0

와우 : 고마워요. 너는 그렇게 명확하고 쉽게 그렇게했다. – Trimadix

+0

무슨 소리 야? : o이 예제에서 if 문 안에서 2 개의 반복문을 사용하여 반복적 인 반복을 검사 할 수 있다고 생각했습니다. 최적화되지 않은 프로그램 ...하지만 적어도 작동합니다. 당신이 굉장한 더 나은 해결책을 가지고 있다면! 다시 .. 너희들을 도와 줘서 고마워. – Trimadix

0

이전에는 제안이었습니다. 해결책은 다음과 같습니다.

//---------------------------------------------------------------------------- 
#include <iostream> 
#include <iomanip> 
#include <ctime> 
//---------------------------------------------------------------------------- 
int **CreateArray (int N, int M) 
{ 
    int **arr = new int*[N]; 
    for (int i = 0; i<N; i++) 
     arr[i] = new int [M]; 

    for (int i = 0; i<N; i++) 
     for (int j = 0; j<M; j++) 
      arr[i][j] = rand()%10 - rand()%10; 

    return arr; 
} 

void DestroyArray (int **arr, int N) 
{ 
    for (int i = 0; i<N; i++) 
     delete [] arr[i]; 
    delete [] arr; 
} 

void PrintArray (int **arr, int N, int M) 
{ 
    for (int i = 0; i<N; i++) 
    { 
     for (int j = 0; j<M; j++) 
      std::cout << std::setw(7) << arr[i][j]; 
     std::cout << "\n"; 
    } 
    std::cout << "\n"; 
} 

//---------------------------------------------------------------------------- 
typedef struct _min 
{ 
    int value; 
    int i; 
    int j; 
} TMin; 

//--------------------------------------------------------------------------- 
void FindMin (int **arr, int N, int M, TMin **mins, int min_count) 
{ 
    mins[min_count]->value = arr[0][0]; 
    mins[min_count]->i = 0; 
    mins[min_count]->j = 0; 

    for (int i = 0; i<N; i++) 
     for (int j = 0; j<M; j++) 
     { 
      if (arr[i][j] < mins[min_count]->value) 
      { 
       bool prev = false; 
       for (int k = 0; k<min_count; k++) 
        if (i == mins[k]->i && j == mins[k]->j) 
        { 
         prev = true; 
         break; 
        } 

       if (!prev) 
       { 
        mins[min_count]->value = arr[i][j]; 
        mins[min_count]->i = i; 
        mins[min_count]->j = j; 
       } 
      } 
     } 
} 
//---------------------------------------------------------------------------- 
int main() 
{ 
     //array creation, filling, printing 
     srand ((unsigned int)time (NULL)); 
     int N = 6, M = 7; 
     int **arr = CreateArray (N, M); 
     PrintArray (arr, N, M); 

     //container for 3 minimums 
     TMin **mins = new TMin*[3]; 
      for (int i = 0; i<3; i++) 
       mins[i] = new TMin; 

     //let us find them 
     int min_count = -1; 
     while (++min_count < 3) 
      FindMin (arr, N, M, mins, min_count); 

     //result 
     for (int i = 0; i<3; i++) 
      std::cout << "arr[" << mins[i]->i << "][" <<mins[i]->j << "] = " << mins[i]->value << "\n"; 

     //cleaning memory 
     for (int i = 0; i<3; i++) 
      delete [] mins[i]; 
     delete [] mins; 

     DestroyArray (arr, N); 

     std::cin.sync(); 
     std::cin.get(); 
     return 0; 
} 
//----------------------------------------------------------------------------- 
관련 문제