分析:这道题其实并不难,计算每一个各位和,然后重复的统计一次,最后排序输出就可以。
我下面的代码中是这样写的,首先写了一个函数用于返回它的各位数字之和,然后用动态数组接收之后排序。
最后用unique和erase两个函数结合去重。代码如下:
using namespace std;
int fre(int x)
{
int s=0;
while(x)
{
s+=x%10;
x/=10;
}
return s;//各位数字之和
}
int main()
{
map<int,int>m;
vector<int>b;
int n,x;
cin>>n;
while(n--)
{
cin>>x;
x=fre(x);
b.push_back(x);//将输入的每个数的返回值插入到动态数组中
}
sort(b.begin(),b.end());//从小到大对数组进行排序
b.erase(unique(b.begin(),b.end()),b.end());//去重
cout<<b.size()<<endl;/输出个数
for(vector<int>::iterator it=b.begin();it!=b.end();it++)//输出每个数字
{
if(it==b.begin())
cout<<*it;
else
cout<<" "<<*it;
}
}