注:本题解写给和本蒟蒻一样的萌新看,不喜者请略过。另欢迎各位大佬提出意见!
这题其实很H₂O,因为数据较小(N≤100),用for循环就可以A掉。但是,在这里我们用一个简单且快速的方法:
STL库!(STL大法好)
首先我们来认识一下这两个函数:
排序函数 sort
sort是C++STL库里的排序函数,属于十分常用的函数之一,可以节省一些手写的时间 (懒人福音),缺点就是运行起来没有手写的快(STL都这一个尿性)。
sort函数的格式是这样的:
sort(数组名称,数组名称+数组元素个数);
举个例子:
int a[15]; sort(a,a+15);
然后你就会发现,它已经帮你排好序了!
去重函数 unique
unique也是C++STL库里的常用函数之一,用来给一个已经
排!好!序!的!
数组去重。unique的原理其实是把重复的元素用后面的元素代替掉。
unique函数的用法是这样的:
unique(数组名称,数组名称+数组元素个数)
当然它还有一个十分神奇的用法:
int n = unique(数组名称,数组名称+数组元素个数);
这样,你就会惊喜的发现,不但数组已经去重,还得到了去重后的数组元素数量!
需要注意的是:
如果你输入数据时for循环喜欢写i=1,那么sort和unique应该相应的变为(数组名称+1,数组名称+数组元素个数+1)
当然,不要忘记了头文件:
<algorithm>
好了,直接献上
AC代码!
#include<cstdio> #include<algorithm> //头文件记得加上哦 using namespace std; int n,a[107],t; int main() { scanf("%d",&n); //用scanf和printf读写速度会比cout和cin快,所以建议使用scanf和printf for(int i=0;i<n;i++) scanf("%d",&a[i]); sort(a,a+n); t=(unique(a,a+n)-a); printf("%d\n",t); for(int i=0;i<t;i++) printf("%d ",a[i]); return 0; }
另附i=1的写法:
#include<cstdio> #include<algorithm> using namespace std; int n,a[107],t; int main() { scanf("%d",&n); for(int i=1;i<=n;i++) scanf("%d",&a[i]); sort(a+1,a+n+1); t=(unique(a+1,a+n+1)-a-1); printf("%d\n",t); for(int i=1;i<=t;i++) printf("%d ",a[i]); return 0; }
好了,这篇题解就这样A掉了