如何在C中删除数组中的重复值?
我想删除数组中的重复值。例如:数组[1,5,6,1,3,5,9]我想要数组[6,3,9]。如何在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
我写了这封信,但我遇到了麻烦:
#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<代码>。它不是一个变量函数!我是学生,我已经开始了。几个月前就学会了。所以,如果你能帮助我,请原谅