我在main()
void calc(int dim){
int a[dim],i,j,temp;
for(int i=0;i<dim;i++)
{
printf("\n\n Type a number - [%d/%d]: \t",i+1,dim);
scanf("%d", &a[i]);
}
for(i=0;i<dim;i++)
{
for(j=i+1;j<dim;j++) {
if(a[i]==a[j])
{
continue;
}
else
{
temp=a[i];
a[i]=a[j];
a[j]=temp;
printf("%d", a[j]);
}
}
}
for(i=0;i<dim;i++)
printf("%d", a[i]);
}
输入参数dim
是数组的维度。您看到的代码完美无缺,因为它会对数组中的数字进行排序。
如果用户键入4 5 8 7 5作为输入数字,我想要输出如下:8 7 5 4.我必须删除重复的数字,所以我想:
if(a[i]==a[j])
{
continue;
}
顺便说一下输出仍然是8 7 5 5 4.我怎么能解决这个问题?
答案 0 :(得分:3)
当您发现副本时,您需要“删除”它。您应该将列表中的最后一项移动到当前位置(a[j]
),然后递减dim
。
你需要考虑如何将可能修改的维度返回给调用代码,但是你也遇到了其他代码如何获得函数本地数组的问题。
答案 1 :(得分:-1)
您正在检查之前移动号码。这就是你错过它的原因。我建议先对它们进行排序,然后再检查重复项(current == prev)。也许其他技术也可以。