需要帮助在数组中查找唯一值

时间:2012-09-20 03:11:55

标签: c arrays search

我的代码完整减去一个小缺陷。它搜索数组并打印出哪些值是唯一的,但是它始终将第一个条目计为唯一,即使它后面跟着相同的值。任何人都可以看看我的代码并告诉我哪一部分搞砸了,因为它让我发疯了。

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

2 个答案:

答案 0 :(得分: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);
   }
}

答案 1 :(得分:1)

我对你的代码感到困惑,但错误是显而易见的。例如,如果输入数组为9 8 7 9 8 7 9,则prev在第一次迭代时应为9,而在i == 1时,prev == array1[i]为false。我们来到else子句,当然count现在只有1。我建议你重写整个事情......要么构建一个数组来存储每个条目的频率,要么对数组进行排序。