讨论 / 我的咋不通过
律归 2018-07-26 15:07:01
点我顶贴 收藏 删除
a.先排序,在去重

b.所谓去重也就是不输出重复的值

c.一个tag标记上次访问的,当时访问的和这个tag相等就不输出,直接下次循环;如果不相等,就让当时值赋值tag,并输出,进入下次循环

前提必须是先排序。

#include <stdio.h>

#include <stdlib.h>

int comp(const void *p1,const void *p2)

{

int *pter1 = (int *)p1;

int *pter2 = (int *)p2;

if(*pter1 > *pter2)

{

return 1;

}

else if(*pter1 == *pter2)

{

return 0;

}

else

{

return -1;

}

}

int main(void)

{

int num,i=0;

int tag=0;

scanf("%d",&num);

int array[num];

while(scanf("%d",&array[i]))

{

++i;

if(i == num)

break;

}

qsort(array,num,sizeof(int),comp);

for(i=0;i<num;i++)

{

if(tag == array[i])

{

continue;

}

tag = array[i];

printf("%d ",array[i]);

}

return 0;

}

#1 Herobrine@2018-08-09 16:25:28
回复 删除
其实不用这么麻烦,

去重:用一个1001大的数组a,假定那个数的值为t,那么将a[t]置为1即可不管有多少个这样的数永远只是1.

统计:在输入t后面,a[t]=1前加一个if,判断这个位置的数有没有出现过,没有ans++

输出:从1到1000,如果a[i]的值为1就输出i和空格

查看更多回复
提交回复