0

我有这个 void 函数,我在我的某个时间点调用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。我该如何解决这个问题?

4

2 回答 2

3

当您发现重复项时,您需要“删除”它。您可能应该将列表中的最后一项移动到当前位置 ( a[j]),然后递减dim

您需要考虑如何将可能修改的维度返回给调用代码,但是您还会遇到其他代码如何获取函数本地数组的问题。

于 2013-07-25T16:40:03.307 回答
-1

您在检查之前移动号码。这就是你错过它的原因。我建议先对它们进行排序,然后再检查重复项(当前 == 上一个)。也许其他技术也可以。

于 2013-07-25T16:34:38.427 回答