Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在C中删除数组中的重复值?_C_Arrays_Duplicate Removal - Fatal编程技术网

如何在C中删除数组中的重复值?

如何在C中删除数组中的重复值?,c,arrays,duplicate-removal,C,Arrays,Duplicate Removal,我想删除数组中的重复值。例如:数组[1,5,6,1,3,5,9]我想要数组[6,3,9]。 我写了这封信,但我遇到了麻烦: #include<stdio.h> main() { int array[50], i, j, k=0, c=0, array2[50], n; printf("Enter array dimension: "); scanf("%d", &n); for (i = 0; i < n; i++) { prin

我想删除数组中的重复值。例如:数组[1,5,6,1,3,5,9]我想要数组[6,3,9]。
我写了这封信,但我遇到了麻烦:

#include<stdio.h>
main() {
    int array[50], i, j, k=0, c=0, array2[50], n;
    printf("Enter array dimension: "); scanf("%d", &n);
    for (i = 0; i < n; i++) {
        printf("array[%d]= ", i); scanf("%d", &array[i]);
    }
    for (i = 0; i < n; ) {
        for (j = i + 1; j < n; j++) {
            if (array[i] == array[j])
                i++;
            else {
                array2[k++] = array[i];
                c++;
            }
        }
    }
    for (k = 0; k < c; k++) {
        printf("%d  ", array2[k]);
    }
    system("pause");
}
#包括
main(){
int数组[50],i,j,k=0,c=0,array2[50],n;
printf(“输入数组维度:”;scanf(“%d”,&n);
对于(i=0;i
您应该首先用伪代码描述您的问题,并将其分解成更小的部分

从零开始,删除所有这些冗余变量,并尝试实现以下算法:

for each element in inputArray
   if not elementIsDuplicate(element)
      add to outputArray
这是一个
for
循环。
元素是两个独立的功能


现在尝试实现函数
elementIsDuplicate
。此函数还包含一个循环,获取输入参数
(int*array,int n,int currentIdx)
,并返回
1
0
,指示
currentIdx
处的元素是否出现在数组中的任何其他位置。

<,然后把它切成小块

#include<stdio.h>

int main(){
    int array[50], i, j, k=0, c, n, array2[50] = {0};
    printf("Enter array dimension: "); scanf("%d", &n);
    for (i = 0; i < n; ++i){
        int num, dup = 0;
        printf("array[%d]= ", i); scanf("%d", &num);
        for(j = 0; j < k; ++j){
            if(array[j] == num){
                array2[j] = dup = 1;
                break;
            }
        }
        if(!dup){
            array[k++] = num;
        }
    }

    for (c=i=0; i < k; ++i){
        if(!array2[i])
            printf("%d ", array[c++] = array[i]);
    }
    printf("\n");
/*
    for(i=0;i<c;++i)
        printf("%d ", array[i]);
    printf("\n");
*/
    system("pause");
    return 0;
}
从零开始,删除所有这些冗余变量,并尝试实现以下算法:

for each element in inputArray
   if not elementIsDuplicate(element)
      add to outputArray
这是一个
for
循环。
元素是两个独立的功能

现在尝试实现函数
elementIsDuplicate
。此函数还包含一个循环,获取输入参数
(int*array,int n,int currentIdx)
,并返回
1
0
,指示
currentIdx
处的元素是否出现在数组中的任何其他位置。

\35;
#include<stdio.h>

int main(){
    int array[50], i, j, k=0, c, n, array2[50] = {0};
    printf("Enter array dimension: "); scanf("%d", &n);
    for (i = 0; i < n; ++i){
        int num, dup = 0;
        printf("array[%d]= ", i); scanf("%d", &num);
        for(j = 0; j < k; ++j){
            if(array[j] == num){
                array2[j] = dup = 1;
                break;
            }
        }
        if(!dup){
            array[k++] = num;
        }
    }

    for (c=i=0; i < k; ++i){
        if(!array2[i])
            printf("%d ", array[c++] = array[i]);
    }
    printf("\n");
/*
    for(i=0;i<c;++i)
        printf("%d ", array[i]);
    printf("\n");
*/
    system("pause");
    return 0;
}
int main(){ int数组[50],i,j,k=0,c,n,array2[50]={0}; printf(“输入数组维度:”;scanf(“%d”,&n); 对于(i=0;i#包括 int main(){ int数组[50],i,j,k=0,c,n,array2[50]={0}; printf(“输入数组维度:”;scanf(“%d”,&n); 对于(i=0;i#包括 main() { int n,a[50],b[50],计数=0,c,d; printf(“输入数组中的元素数\n”); scanf(“%d”和“&n”); printf(“输入%d个整数\n”,n); 对于(c=0;c
#包括
main()
{
int n,a[50],b[50],计数=0,c,d;
printf(“输入数组中的元素数\n”);
scanf(“%d”和“&n”);
printf(“输入%d个整数\n”,n);

对于(c=0;cYou在第一个
for
循环中不是递增的
i
。如果
array[i]==array[j]
没有发生,
i
将永远保持不变。而且,
k
c
似乎有相同的值,请去掉其中一个。数值范围有限吗?您对性能有任何限制吗(大O),或者
O(n*n)
可以接受吗?我想它应该是一个小数组,10-15个元素。我知道,我得到了无限循环。我怎么能改变它呢?谢谢你的循环永远不会终止,因为正如我上面写的,你在所有情况下都不会增加
I
。尝试调试(一步一步,使用你最喜欢的调试器)当输入数组是
[1,2,3]
时,人们在哪里学习编写
main()严重的是,<代码> main < /COD>没有参数已经被弃用/过时/坏的实践自从90年代的某个时候。人们仍然使用早期K& R,或者阅读C++书籍,或者什么?这是2014。在C中,主要功能有两个参数,或者<代码> Value<代码>。它不是一个变量函数!我是学生,我已经开始了。几个月前学过C。所以,如果你能帮我,请帮我。你不是在第一个
循环中为
增加
i
。如果
array[i]==array[j]
不会发生,
i
将永远保持不变。而且,
k
c
似乎具有相同的值,去掉其中一个。数字的范围是否受到限制?您对性能有任何限制(大O),还是
O(n*n)
可以接受吗?我想它应该是一个小数组,10-15个元素。我知道,我得到了无限循环。我怎么能改变它呢?感谢你的循环从未终止,因为正如我上面所写的,你不会在所有情况下递增
I
。尝试调试(一步一步,使用你最喜欢的调试器)输入数组为
[1,2,3]时的情况
。人们在哪里学习写
main()严重的是,<代码> main < /COD>没有参数已经被弃用/过时/坏的实践自从90年代的某个时候。人们仍然使用早期K& R,或者阅读C++书籍,或者什么?这是2014。在C中,主要功能有两个参数,或者<代码> Value<代码>。它不是一个变量函数!我是学生,我已经开始了。几个月前就学会了。所以,如果你能帮助我,请原谅