朋友数 (PATB-1064)
题面
如果两个整数各位数字的和是一样的,则被称为是“朋友数”,而那个公共的和就是它们的“朋友证号”。例如 123 和 51 就是朋友数,因为 1+2+3 = 5+1 = 6,而 6 就是它们的朋友证号。给定一些整数,要求你统计一下它们中有多少个不同的朋友证号。
输入
输入第一行给出正整数 N。随后一行给出 N 个正整数,数字间以空格分隔。题目保证所有数字小于 10^4。
输出
首先第一行输出给定数字中不同的朋友证号的个数;随后一行按递增顺序输出这些朋友证号,数字间隔一个空格,且行末不得有多余空格。
样例输入
18
2123 899 51 998 27 33 36 12
样例输出
14
23 6 9 26
提示
无
思路
代码
1int a[40];
2
3int main()
4{
5 int n; scanf("%d", &n);
6
7 int num = 0;
8 for(int i=0; i<n; i++)
9 {
10 int x, sum = 0;
11 scanf("%d", &x);
12 while(x){
13 sum += x % 10;
14 x /= 10;
15 }
16 if(a[sum] == 0){
17 a[sum]++;
18 num++;
19 }
20 }
21
22 printf("%d\n", num);
23 int nf = 0;
24 for(int i=0; i<40; i++){
25 if(a[i])
26 {
27 if(nf)
28 printf(" ");
29 else
30 nf = 1;
31 printf("%d", i);
32 }
33 }
34
35 return 0;
36}