解析
两种做法
第一种用set。
第二种,先建立一个数组,读入每个数时打好标记,立个flag计重。由于数组不方便存储(中间如果重复的话有间隔),所以用vector,最后排好序输出(也可以先排序再去重)
代码
方法一
#include<bits/stdc++.h>
using namespace std;
int n;
int num;
int countor;
set<int> grades;
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
{
int flag=grades.size();
cin>>num;
grades.insert(num);
if(grades.size()==flag) countor++;
else continue;
}
cout<<n-countor<<endl;
set<int>::iterator it;//迭代器存储指针
for(it=grades.begin();it!=grades.end();it++)
{
if(it==grades.begin()) cout<<*it;
else cout<<" "<<*it;//输出格式方案,第一个前不带空格,后面所有的为空格+*t
}
cout<<endl;
}
方法二
#include<bits/stdc++.h>
using namespace std;
int a[100];
vector<int> vn;
int n;
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>a[i];
}
sort(a+1,a+n+1);//排序
int sum=0;
for(int i=1;i<=n;i++)
{
if(i==1)
{
vn.push_back(a[i]);
sum++;
}
else
{
if(a[i]!=a[i-1])
{
vn.push_back(a[i]);
sum++;
}
else continue;//因为是排好序的序列,所以只需要跟自己前面的成员比较异同,相同则重复。
}
}
cout<<sum<<endl;
for(int i=0;i<=vn.size()-1;i++)
{
if(i==vn.size()-1)
{
cout<<vn[i]<<endl;
}
else cout<<vn[i]<<" ";
}
return 0;
}