题目大意:
代码如下:
方法一:使用map
//map
#include<iostream>
#include<map>
#include<vector>
#include<stdlib.h>
#define MAX 1000000
using namespace std;
int n,num;
map<int,int> m;
int cal(int x){
int sum=0;
while(x!=0){
int temp=x%10;
sum+=temp;
x/=10;
}
return sum;
}
int main(){
cin>>n;
for(int i=0;i<n;i++){
cin>>num;
int sum=cal(num);
m[sum]=1;
}
map<int,int>::iterator it;
vector<int> vec;
for(it=m.begin();it!=m.end();it++){
if(it->second==1){
vec.push_back(it->first);
}
}
cout<<vec.size()<<endl;
for(int i=0;i<vec.size();i++){
cout<<vec[i];
if(i!=vec.size()-1){
cout<<" ";
}
}
return 0;
}
方法二:使用set
#include<iostream>
#include<stdio.h>
#include<set>
#define MAX 1000000
using namespace std;
int n,a;
set<int> s;
int cal(int x){
int sum=0;
while(x!=0){
int temp=x%10;
sum+=temp;
x/=10;
}
return sum;
}
int main(){
scanf("%d",&n);
for(int i=0;i<n;i++){
scanf("%d",&a);
int sum=cal(a);
s.insert(sum);
}
printf("%d\n",s.size());
set<int>::iterator it;
for(it=s.begin();it!=s.end();it++){
printf("%s%d",it==s.begin()?"":" ",*it);
}
return 0;
}