0

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

    #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 == 1,prev == array1[i]是假的。我们来到 else 子句,当然count1现在。我建议你重写整个事情......要么构建一个数组来存储每个条目的频率,要么对数组进行排序。

于 2012-09-20T03:31:02.423 回答