有没有大佬帮我看看哪里错了,啥也没输出

P1059 [NOIP2006 普及组] 明明的随机数

@[niganmaaaaa](/user/1030814) 你能不能先排好序,输出的时候标记一下输出的数字,如果有第二次标记的就代表重复了,就不输出了。
by Genius_Star @ 2023-07-07 16:15:39


@[niganmaaaaa](/user/1030814) 去重的时候可以使用 unique 函数,如下: ```cpp #include<bits/stdc++.h> using namespace std; int a[1005],n,num; bool cf(int b) { for(int i=1;i<=num;i++) { if(a[i]==a[b]) { return 0; } } return 1; } int main() { cin>>n; num=n; for(int i=1;i<=n;i++) { cin>>a[i]; } sort(a+1,a+n+1); num=unique(a+1,a+n+1)-(a+1); cout<<num<<endl; for(int i=1;i<=num;i++) { cout<<a[i]<<" "; } return 0; } ```
by Genius_Star @ 2023-07-07 16:19:08


@[Genius_Star](/user/979266) 感谢大佬,这就去试试
by CSPJ_AKme @ 2023-07-07 16:31:37


@[Genius_Star](/user/979266) # 感谢大佬 AC啦
by CSPJ_AKme @ 2023-07-07 16:41:10


@[Genius_Star](/user/979266) 还有一个小问题,大佬能不能大至讲下unique函数啊
by CSPJ_AKme @ 2023-07-07 16:54:02


@[niganmaaaaa](/user/1030814) 这个函数参数和sort一样,是将一个区间内的重复数只保留一个。 手写的话,可以这样: ```cpp //设要去重a数组,长度为n,定义一个bool数组f,表示这一位是有重复 #include<bits/stdc++.h> using namespace std; int a[100001],f[100001],n; int main(){ cin>>n; for(int i=1;i<=n;i++) cin>>a[i]; for(int i=2;i<=n;i++) for(int j=1;j<i;j++) if(a[i]==a[j]) f[j]=1; //标记 for(int i=1;i<=n;i++) if(!f[i]) cout<<a[i]<<' '; return 0; } ```
by Genius_Star @ 2023-07-07 16:59:38


@[niganmaaaaa](/user/1030814) 不过排序了之后,你只需要相邻位判断就行了,因为数字是从小到大的!
by Genius_Star @ 2023-07-07 17:01:56


感谢大佬
by CSPJ_AKme @ 2023-07-07 18:51:29


|