最近,在做明明的随机数(http://joyoj.org/problem/29005)这道题,我本来看到“对于其中重复的数字,只保留一个,把其余相同的数去掉”时,原来想着自己用sort手撸一段去除代码,后来发现有去重函数unique。unique这个函数很不错。
1.头文件
建议使用万能头文件。
#include<bits/stdc++.h>
2.用法
sort(begin,end);
unique(begin,end);
*:begin和end需要替换成数组首地址和尾地址,先sort的原因是unique的函数只能去除相邻的重复。而且unique不可以在程序中使用两次。
3.小问题
在去重以后,数组长度会改变。其实没有改变,但是,请看图1
图(1)
4.问题解决
这个问题就是有效元素的问题。大家可以联系前面的内容想一想。好像没有解法!
如果想要输出去重后有效元素的个数,可以用
cout<<unique(randnumber,randnumber+number)-randnumber<<endl;
其实效果也是去重。只不过返回了有效元素个数的而已。
5.最终代码
最终,明明的随机数一题的解法是:
#include<bits/stdc++.h> using namespace std; int main(){ int number; cin>>number; int randnumber[number]; for(int i=0;i<number;i++){ cin>>randnumber[i]; } sort(randnumber,randnumber+number); cout<<unique(randnumber,randnumber+number)-randnumber<<endl; for(int i=0;i<unique(randnumber,randnumber+number)-randnumber;i++){ cout<<randnumber[i]<<" "; } return 0; }
-------------------------
至此,教程结束。
任何问题,请点击侧边的QQ联系按钮,联系我。
写于2019-11-04 21:59:57