0

私のコードは完全ですが、小さな欠陥が1つあります。配列を検索して一意の値を出力しますが、同じ値が後に続く場合でも、最初のエントリは常に一意としてカウントされます。誰かが私のコードを見て、それが私を狂わせているので、どの部分がこれを台無しにしているのか教えてもらえますか?

    #include <stdio.h>
    #define size 7
    int main(void)
    {
        int array1[size], target, answer, found, x, k, prev, count =1, i;

        printf("Please input %d integers: ", size);
        scanf("%d", &target);

        for(x = 0; x < size; x++)
        {
             scanf("%d", &array1[x]);

        }

        prev = array1[0];

        for (i = 1; i < size; i++) 
        {
             if (array1[i] == prev) 
             {
                 count++;
             } 
             else 
             {
                 if (count < 2)
                     printf("%d=%d\n", prev, count);
                 prev = array1[i];
                 count = 1;
             }

        }

        if (count < 2)
        {
             printf("%d=%d\n", prev, count);
        }

        return 0;
   }
4

2 に答える 2

2

さて、明確な頻度カウントを維持するためにこのスタブを投稿するだけの誘惑に抵抗することはできませんでした。

int countFreq(int data[])
{
   int freq[size];

   for(int x=0; x<size; x++)
   { 
      freq[data[x]]++;
   }

   for(int y=0; y<size; y++)
   {
      if (freq[y]==1)
        printf("Unique value: %i",y);
   }
}
于 2012-09-20T03:35:11.517 に答える
1

私はあなたのコードに混乱していますが、エラーは明らかです。たとえば、入力配列が9 8 7 9 8 7 9、のprev場合、最初の反復では9である必要がありi == 1prev == array1[i]がfalseの場合です。そして、else節に行き着きます。もちろん、これcount1今だけです。全体を書き直すことをお勧めします...各エントリの頻度を格納する配列を作成するか、配列を並べ替えます。

于 2012-09-20T03:31:02.423 に答える