我的代码完整减去一个小缺陷。它搜索数组并打印出哪些值是唯一的,但是它始终将第一个条目计为唯一,即使它后面跟着相同的值。任何人都可以看看我的代码并告诉我哪一部分搞砸了,因为它让我发疯了。
#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;
}
答案 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
。我建议你重写整个事情......要么构建一个数组来存储每个条目的频率,要么对数组进行排序。