我想删除数组中的重复值。例如:数组[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");
}
答案 0 :(得分:3)
您应该首先在伪代码中描述您的问题,然后将其分解为更小的部分。
通过删除所有这些冗余变量从头开始,并尝试实现以下算法:
for each element in inputArray
if not elementIsDuplicate(element)
add to outputArray
这是一个for
循环。 elementIsDuplicate
是单独的功能。
现在尝试实现函数elementIsDuplicate
。此函数还包含一个循环,接受输入参数(int* array, int n, int currentIdx)
并返回1
或0
,指示currentIdx
处的元素是否出现在数组中的任何其他位置。
答案 1 :(得分:1)
#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;
}
答案 2 :(得分:0)
#include<stdio.h>
main()
{
int n, a[50], b[50], count = 0, c, d;
printf("Enter number of elements in array\n");
scanf("%d",&n);
printf("Enter %d integers\n", n);
for(c=0;c<n;c++)
scanf("%d",&a[c]); //enter array elements
for(c=0;c<n;c++)
{
for(d=0;d<count;d++)
{
if(a[c]==b[d])
break;
}
if(d==count)
{
b[count] = a[c];
count++;
}
}
printf("count is: %d\n",count);
printf("Array obtained after removing duplicate elements\n");
for(c=0;c<count;c++)
printf("%d\n",b[c]);
return 0;
}
这将从所需的数组中删除多个重复项。 示例:如果输入数组为:3 6 5 6 2 8 6 5 9 8 6 ,,那么输出数组将为:3 6 5 2 8 9