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

2番目の 'if'は配列の最後の要素を超えてアクセスし、最後の' if'の後の2つの文は '{}'にあるべきですか? –

+0

私はそれらを1つに{}含んでいますが、それでも私の望むように動作しません。 –

+2

デバッガおよび/またはデバッグプリントステートメントを使用して、プログラムの実行をトレースします。 – kaylum

答えて

0

私は与えられた数の出現回数をカウントしたりelse 1にカウンタを設定することによって、やり直すことifelseコンボを使用してコードを修正しました。最後に、現在の発生数が以前に格納した数よりも大きいかどうかをチェックして、現在のモードとサイズを入れ替えることができます。

#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; 
} 
関連する問題