从零起步看算法(第六天 4.11)
//q7 蒜头君的随机数
本题重点:去重
一开始想了几个方法:先排序再去重,利用特有函数去重。
1.先看排序去重法:
自己写了半天一直没有解决多个重复的问题,于是借鉴了一下网上的思路。
https://www.cnblogs.com/rongy/p/6597014.html
自己用的是数组去重发。
可注意点:1.创造两个相同数组,需要用for循环赋值实现。
2.注意参数
#include<stdio.h>
#include<string>
#include<cstring>
#include<iostream>
#include<assert.h>
#include<cmath>
#include<algorithm>
using namespace std;
#define maxn 100+5
int a[maxn];
void fun(int a[],int n){
sort(a,a+n);
int b[n];
for(int i=0;i<n;i++){
b[i]=a[i];
}
int p=1;
for(int i=1;i<n;i++){
if(a[i-1]!=a[i]){
b[p]=a[i];
p++;
}
}
cout<<p<<endl;
for(int j=0;j<p;j++){
if(j!=0){
cout<<" ";
}
cout<<b[j];
}
cout<<endl;
}
int main(){
int n;
while(cin>>n){
memset(a,0,sizeof(a));
for(int i=0;i<n;i++){
cin>>a[i];
}
fun(a,n);
}
return 0;
}
2.c++特有去重法
1.<set>中自含去重能力
2.对于长度为n数组a,unique(a,a+n) - a返回的是去重后的数组长度
#include<algorothm>
https://blog.csdn.net/tomorrowtodie/article/details/51907471
#include<stdio.h>
#include<string>
#include<cstring>
#include<iostream>
#include<assert.h>
#include<cmath>
#include<algorithm>
using namespace std;
#define maxn 100+5
int a[maxn];
void fun(int a[],int n){
sort(a,a+n);
int p=unique(a,a+n)-a;//去重后的数组长度
cout<<p<<endl;
for(int j=0;j<p;j++){
if(j!=0){
cout<<" ";
}
cout<<a[j];
}
cout<<endl;
}
int main(){
int n;
while(cin>>n){
memset(a,0,sizeof(a));
for(int i=0;i<n;i++){
cin>>a[i];
}
fun(a,n);
}
return 0;
}