如何检测数组中的重复项打印非重复?

时间:2016-08-12 21:39:47

标签: c arrays loops duplicates conditional-statements

    void main ()
    {
        int x[19]={0}, i=0, y=0, u=0, p;
        while (i<=19)
        {
            scanf("%d",&x[i]);
            i=i+1;
        }
        for (i=u;i<=19;i++)
        {
            if (x[y]!=x[i+1])
                p=x[y];
                else
                {
                   u++;
                   y++;
                }
        }
        printf("%d",p);
    }

所以我用这个来检查重复和&amp;它应该打印非重复,但正如你可以看到,如果所有都是重复但是一个,如在         x [0] = 1 x [1] = 1 x [3] = 9 x [4] = 1 ... x [19] = 1;

    prints 
      9 

那么如何打印非重复?有什么帮助吗?

3 个答案:

答案 0 :(得分:0)

最简单的方法之一是对数组进行排序以将重复项组合在一起。然后,当您浏览阵列时,只打印一个数字(如果它与之前的数字不同)。

// Print the unique elements of a sorted array:
for(int i=0; i<N; i++){
    if (i-1 >= 0 && arr[i] == arr[i-1]) { continue; }
    if (i+1 < N  && arr[i] == arr[i+1]) { continue; }
    printf("%d\n", arr[i]);
}

要对数组进行排序,您可以使用qsort函数

答案 1 :(得分:0)

这将是最简单的解决方案,只需嵌套一个额外的for循环。但是,这需要O(n ^ 2)。根据数组的大小,查看快速排序可能是有益的。

void main() {
    int x[4] = { 1, 3, 2, 1 };

    size_t i, j;
    for (i = 0; i < sizeof(x) / sizeof(int); i ++) {
        // Note that we only have to go to the last value before i.
        for (j = 0; j < i; j ++) {
            // We break if the value is a duplicate.
            if (x[i] == x[j])
                break;
        }

        // Check if the inner loop was break'ed (j < i) or not (j == i).
        if (j == i)
            printf("Unique: %i\n", x[i]);
    }
}

还有一件事:如果在编译期间知道sizeof(x) / sizeof(int)的大小,则只使用x。这就是这种情况,但不要将其与malloc一起使用。

答案 2 :(得分:0)

$(document).ready(function() {
    $("#btn").click(function(){
        $("#label1").html((new Date()).getSeconds());
        $('#btn').off('click');
    });
})