@[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