gpt4 book ai didi

c - C语言删除数组重复元素的程序

转载 作者:行者123 更新时间:2023-11-30 20:11:12 25 4
gpt4 key购买 nike

我尝试编写一个程序来从数组中删除重复值。我已经部分成功地做到了这一点,因为我的程序能够删除数组中重复两次的任何一个数字。 所以问题是,如果一个数字重复三次,则只有一个数字被删除,即另外两个仍然留在数组中,而且如果重复多个数字,即使重复,也只有第一个数字数组被删除。我真的不明白我的代码出了什么问题,为什么它无法删除重复两次以上的数字。我已经在网上浏览过这个问题,尽管我有不同的方法来删除重复元素,但我仍然不知道我的代码出了什么问题。

#include <stdio.h>
#include <stdlib.h>

int dup(int [],int);
int main()
{
int i,n,index,a[20];
printf("Enter n value \n");
scanf("%d",&n);
printf("Enter array values \n");
for(i=0;i<n;++i)
scanf("%d",&a[i]);
for(i=0;i<n;++i)
{
index=dup(a,n);
if(index==-1)
{
printf("No duplicate elements");
break;
}
else
{
a[index]=0;
for(i=index;i<n;i++)
a[i]=a[i+1];
n-=1;
}
}
printf("Output: \n");
for(i=0;i<n;++i)
printf("%d\n",a[i]);

return (EXIT_SUCCESS);
}
int dup(int a[],int size)
{
int i,j,pos=-1;
for(i=0;i<size;i++)
{
for(j=i+1;j<size;j++)
{
if(a[i]==a[j])
{
pos=j;
return pos;
}
}
}
if(pos==-1)
return pos;
}

输出

Enter n value

5

Enter array values

12

24

3

12

24

Output:

12

24

3

24

它显然无法删除另一个重复的元素“24”。此外,如果一个数字重复三次,则只会删除其中一个数字。

最佳答案

for(i=0;i<n;++i)  // <-------------------------------------- for i
{
index=dup(a,n);
if(index==-1)
{
printf("No duplicate elements");
break;
}
else
{
a[index]=0;
for(i=index;i<n;i++) // <--------------------------- for i
a[i]=a[i+1];
n-=1;
}
}

您在两个循环中使用相同的循环变量,一个循环嵌套在另一个循环中。这是行不通的。使用不同的变量。 Live demo .

关于c - C语言删除数组重复元素的程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41845475/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com