2014-04-27 2 views
-1

2D 배열에서 최대 값과 최소값을 찾고 해당 위치를 교환하기로 한 경우, 서신이 2x2 배열의 1234 인 경우 4231이어야합니다 . 는 여기에 내가했던 일이야 : 내가 이전 및 새 배열을 인쇄하는 다른 기능을 사용2D 배열의 최대 및 최소 멤버 인덱스 교환 방법

void interchange (int a[][n],int m) { 
     int i,j; 
     int cmin,cmax,rmin,rmax,temp; 

     int max=a[0][0],min=a[0][0]; 

     for(i = 0; i < m; i++) { 
     for(j = 0; j < n; j++) { 
      if (a[i][j]<min) { 
      rmin=i; 
      cmin=j; 
      min=a[i][j]; 
      } else if (a[i][j]>max) { 
      rmax=i; 
      cmax=j; 
      max=a[i][j]; 
      } 

      temp=a[cmin][rmin]; 
      a[cmin][rmin]=a[cmax][rmax]; 
      a[cmax][rmax]=temp; 
     } 
    } 
    } 

하지만 항상 이전을 인쇄, 나는 그것을 무슨 일이 있었는지 확인하기 위해 교환 함수 내에서 인쇄하려고 할 때 0을 출력합니다.

if..if else 문 부분

는, 나는이 방법이 더 효과적 일 것이라고 생각 :

if (a[i][j]<min) { 
    rmin = i; 
    cmin = j; 
    min = a[rmin][cmin]; 
    } 

...하지만 여전히 같은 문제가 있습니다. 전체 코드 :

#include<iostream.h> 

const int n = 2; 
const int m = 2; 

void read(int a [][n], int m); 
void write(int a [][n], int m); 
void interchange(int a [][n], int m); 

main(){ 
    int a[n][m]; 
    read(a, m); 
    write(a, m); 
    interchange(a, m); 
    write(a, m); 
    return 0; 
} 

void read(int a [][n], int m){ 
    int i, j; 
    for (i = 0; i < m; i++) 
     for (j = 0; j < n; j++) 
      cin >> a[i][j]; 
} 

void write(int a [][n], int m){ 
    int i, j; 
    for (i = 0; i < m; i++){ 
     for (j = 0; j < n; j++) 
      cout << a[i][j] << "\t"; 
     cout << endl; 
    } 
} 

void interchange(int a [][n], int m){ 
    int i, j; 
    int cmin, cmax, rmin, rmax, temp; 

    int max = a[0][0], min = a[0][0]; 

    for (i = 0; i < m; i++){ 
     for (j = 0; j < n; j++) 
      if (a[i][j] < min){ 
       rmin = i; 
       cmin = j; 
       min = a[rmin][cmin]; 
      } 
      else if (a[i][j] > max){ 
       rmax = i; 
       cmax = j; 
       max = a[rmax][cmax]; 
      } 
      temp = a[cmin][rmin]; 
      a[cmin][rmin] = a[cmax][rmax]; 
      a[cmax][rmax] = temp; 
    } 
} 
+3

로 초기화합니다. – haccks

+0

인쇄 기능도 함께 표시해야합니다. 함수의 끝에서 배열이 어떻게 보이는지 디버거를 사용 했습니까? –

+0

내 질문에 자세한 코드를 추가했습니다. –

답변

2

코드에 문제가 거의 없습니다.

전체 배열을
  1. 루프 다음은 members..So는 두 개의 루프 자체가 최소 또는 RMIN/Cmin은 또는 Rmax가/Cmax는 설정되지 않을 수도 있습니다 하나를 maximum..so 수
  2. 첫 번째 요소 다음에 스왑 코드를 삽입 교환 에서 all..so 제대로 코드를 들여하세요 0
  3. 를 사용하여 적절한 indices..dont 믹스 컬럼 및 행 인덱스

    void interchange (int a[][n],int m) { 
        int i,j; 
        int cmin=0,cmax=0,rmin=0,rmax=0,temp; 
        int max=a[0][0],min=a[0][0]; 
        for(i = 0; i < m; i++) { 
         for(j = 0; j < n; j++) { 
          if (a[i][j]<min) { 
           rmin=i; 
           cmin=j; 
           min=a[i][j]; 
          } 
          if (a[i][j]>max) { 
           rmax=i; 
           cmax=j; 
           max=a[i][j]; 
          } 
         } 
        } 
    
        temp=a[rmin][cmin]; 
        a[rmin][cmin]=a[rmax][cmax]; 
        a[rmax][cmax]=temp; 
    } 
    
관련 문제