1120 Friend Numbers (20 分)
Two integers are called "friend numbers" if they share the same sum of their digits, and the sum is their "friend ID". For example, 123 and 51 are friend numbers since 1+2+3 = 5+1 = 6, and 6 is their friend ID. Given some numbers, you are supposed to count the number of different frind ID's among them.
Input Specification:
Each input file contains one test case. For each case, the first line gives a positive integer N. Then N positive integers are given in the next line, separated by spaces. All the numbers are less than 104.
Output Specification:
For each case, print in the first line the number of different frind ID's among the given integers. Then in the second line, output the friend ID's in increasing order. The numbers must be separated by exactly one space and there must be no extra space at the end of the line.
Sample Input:
8
123 899 51 998 27 33 36 12
Sample Output:
4
3 6 9 26
题目大意:
给出n个数判定他们是否为友数,友数定义为两个数其每个数位上的数的和是相同的,要求输出总共的不同和的个数以及从小到大输出和。
思路:
由于要存入sum, 以及输出个数,以及从小到大排好sum,那么容易想到用set。
由于要处理每一位数,容易想到用string,每一位的处理,这在录入时就可以做了,得出sum后就可以存入set中咯。
参考代码:
#include<set>
#include<string>
#include<iostream>
using namespace std;
string s;
set<int> ans;
int n;
int main(){
scanf("%d", &n);
for(int i = 0;i < n; ++i){
int sum = 0;
cin >> s;
for(int j = 0; j < s.size(); ++j) sum += stoi(s.substr(j, 1));
ans.insert(sum);
}
printf("%d\n", ans.size());
for(auto it = ans.begin(); it != ans.end(); ++it)
if(it == ans.begin()) printf("%d", *it);
else printf(" %d", *it);
return 0;
}