PAT (Basic Level) Practice (中文)1064 朋友数 (20 分) (set)

如果两个整数各位数字的和是一样的,则被称为是“朋友数”,而那个公共的和就是它们的“朋友证号”。例如 123 和 51 就是朋友数,因为 1+2+3 = 5+1 = 6,而 6 就是它们的朋友证号。给定一些整数,要求你统计一下它们中有多少个不同的朋友证号。

输入格式:

输入第一行给出正整数 N。随后一行给出 N 个正整数,数字间以空格分隔。题目保证所有数字小于 1。

输出格式:

首先第一行输出给定数字中不同的朋友证号的个数;随后一行按递增顺序输出这些朋友证号,数字间隔一个空格,且行末不得有多余空格。

输入样例:

8
123 899 51 998 27 33 36 12

输出样例:

4
3 6 9 26


 1 #include <iostream>
 2 #include <string>
 3 #include <cstring>
 4 #include <algorithm>
 5 #include <set>
 6 using namespace std;
 7 int a[10005];
 8 int _deal(int x)
 9 {
10     int sum=0;
11     while(x){
12         sum+=x%10;
13         x/=10;
14     }
15     return sum;
16 }
17 int main()
18 {
19     int n;
20     while(cin>>n){
21         for(int i=0;i<n;i++){
22             cin>>a[i];
23         }
24         set<int> s;
25         set<int> ::iterator ite;
26         for(int i=0;i<n;i++){
27             s.insert(_deal(a[i]));
28         }
29         int sum=s.size();
30         cout<<sum<<endl;
31         for(ite=s.begin();ite!=s.end();ite++){
32             if(ite==s.begin()) cout<<*ite;
33             else cout<<" "<<*ite;
34         }
35         cout<<endl;
36     }
37     return 0;
38 }

 

posted @ 2019-07-14 16:44  wydxry  阅读(262)  评论(0编辑  收藏  举报
Live2D