题目大意
如果两个整数共享相同的数字总和,则称为“朋友号码”,该总和就是他们的“朋友 ID”。例如,123 和 51 是朋友编号,因为 1+2+3 = 5+1 = 6,而 6 是他们的朋友 ID。给定一些数字,您应该计算其中不同朋友 ID 的数量。
解题思路
- 首先根据题意了解定义,是指的每一位的数字加和
- 使用map可以在防止重复的同时排序
代码
#include<bits/stdc++.h>
using namespace std;
map<int, int> res;
int sumString(int x) {
int ans = 0;
while (x) {
ans += x % 10;
x = x / 10;
}
return ans;
}
int main() {
int n;
cin >> n;
for (int i = 0; i < n; i++) {
int tem;
cin >> tem;
int sum = sumString(tem);
if (res.find(sum) == res.end()) {
res.emplace(sum, 1);
}
}
if (res.size() == 0) {
cout << 0 << endl;
}
else {
cout << res.size() << endl;
map<int, int>::iterator iter = res.begin();
cout << iter->first;
iter++;
while (iter != res.end()) {
cout << ' ' << iter->first;
iter++;
}
cout << endl;
}
return 0;
}