2016-09-07 60 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

我修改使用ifelse連擊數給定數量的出現的次數或else由計數器設置爲一個重新開始你的代碼。最後,如果您可以檢查當前的出現次數是否大於我們之前存儲的次數並交換當前的模式和大小。

#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; 
}