2016-09-07 4 views
0

정렬 된 배열의 모드를 찾으려고 했으므로 다음 코드를 작성했다. 그러나, 그것은 저 배열에서 가장 큰 숫자를 제공합니다.모드를 찾기 위해 코드를 작성했지만 가장 큰 숫자를 알려 주겠다.

아무도 도와 줄 수 있습니까?

typedef struct mode { 
    int self; 
    int size; 
} mode; 

mode findmode(int *arr, int size) { 
    mode x; 
    int i = 0; 
    int count = 1; 
    for (i = 0; i < size; i++) { 
    if (i > 1 && i < size) { 
     if (arr[i] == arr[i - 1]) ++count; 
     if (arr[i] != arr[i - 1]) { 
     x.size = count; 
     x.self = arr[i - 1]; 
     count = 0; 
     ++count; 
     } 
     if (arr[i] != arr[i + 1]) { 
     if (count > x.size) x.size = count; 
     x.self = arr[i]; 
     } 
    } 
    } 
    return x; 
} 
+2

두 번째 마지막 'if'는 배열의 마지막 요소를 지나서 하나 액세스하고 마지막'if '다음의 두 문장은'{}'에 있어야합니까? –

+0

하나를 {}에 포함 시키지만 원하는 방식으로 작동하지 않습니다. –

+2

디버거 및/또는 디버그 인쇄 명령문을 사용하여 프로그램 실행을 추적하십시오. – kaylum

답변

0

나는 주어진 수의 발생 수를 계산하거나 하나에 카운터를 설정하여 시작 elseifelse 콤보를 사용하여 코드를 수정했습니다. 마지막으로 현재 발생 횟수가 이전에 저장 한 횟수보다 큰지 여부를 확인할 수 있으며 현재 모드와 크기를 바꿀 수 있습니다.

#include <stdio.h> 

typedef struct mode 
{ 
    int self; 
    int size; 
} mode; 

mode findmode(int *arr, int size) 
{ 
    mode x; 
    x.self = arr[0]; 
    x.size = 1; 
    int i; 
    int count = 1; 
    for (i = 1; i < size; i++) 
    { 
     if(arr[i - 1] == arr[i]) 
     { 
      count++; 
     } 
     else 
     { 
      count = 1; 
     } 
     if(count >= x.size) 
     { 
      x.self = arr[i]; 
      x.size = count; 
     } 
    } 
    return x; 
} 

int main() 
{ 
    int arr[20] = {1,1,1,4,4,4,4,5,5,5,5,5,5,6,6,7,7,7,8,8}; 
    mode m = findmode(arr, 20); 

    printf("The mode is %d with a occurrence count of %d\n", m.self, m.size); 
} 
1

나도 알아 냈어. 나 한테 도와 줘서 고마워. 여기에 새 코드가 있습니다.

mode findmode(int *arr,int size) 
{ 
mode x; 
int i=0; 
int count=1; 
x.size=0; 
    for(i=0;i<size;i++) 
    { 
    if(i>0) 
    { 
     if(arr[i]==arr[i-1]) 
     { 
      ++count; 


     } 

     if (arr[i]!=arr[i-1]) 
     { 
      if(count>x.size) 
      {x.size=count; 
      x.self=arr[i-1];} 
      count= 0; 
      ++count; 



     } 
    } 

    } 
    return x; 
}