1 #include <stdio.h>
2 #include <stdlib.h>
3
4 /*用法:void qsort(void *base,int nelem,int width,int (*fcmp)(const void *,const void *));
5 *参数:
6 *----->1 待排序数组首地址。
7 *----->2 数组中待排序元素数量。
8 *----->3 各元素的占用空间大小。
9 *------>4 指向函数的指针,用于确定排序的顺序。*/
10 int comp(const void *a,const void *b);/*升序*/
11
12 /*
13 *函数功能:数组去重
14 *参数:
15 *----->1 待排序数组首地址。
16 *----->2 数组中待排序元素数量。*/
17 int PID1_duplicateRemoval(int *data,int n);
18
19 /*
20 *函数功能:数组初始化
21 *参数:
22 *----->1 待排序数组首地址。
23 *----->2 数组中待排序元素数量。*/
24 void PID1_initialization(int *data,int n);
25
26 /*
27 *函数功能:结果输出
28 *参数:
29 *----->1 待排序数组首地址。
30 *----->2 数组中待排序元素数量。*/
31 void PID1_output(int *data,int n);
32
33 int main(){
34 int i;
35 int n,data[100];
36 while(scanf("%d",&n)!=EOF){
37 PID1_initialization(data,n);
38 qsort(data,n,sizeof(int),comp);
39 PID1_output(data,PID1_duplicateRemoval(data,n));
40 }
41 return 0;
42 }
43
44 int comp(const void *a,const void *b){
45 return *(int *)a-*(int *)b;
46 }
47
48 int PID1_duplicateRemoval(int *data,int n){
49 int i,j;
50 i=1,j=0;
51 while(i<n){
52 if(data[i]!=data[j])
53 data[++j]=data[i];
54 i++;
55 }
56 return j+1;
57 }
58
59 void PID1_initialization(int *data,int n){
60 int i;
61 for(i=0;i<n;i++)
62 scanf("%d",&data[i]);
63 }
64
65 void PID1_output(int *data,int n){
66 int i;
67 printf("%d\n",n);
68 for(i=0;i<n;i++){
69 if(i)
70 printf(" ");
71 printf("%d",data[i]);
72 }
73 printf("\n");
74 }