如果两个整数各位数字的和是一样的,则被称为是“朋友数”,而那个公共的和就是它们的“朋友证号”。例如 123 和 51 就是朋友数,因为 1+2+3 = 5+1 = 6,而 6 就是它们的朋友证号。给定一些整数,要求你统计一下它们中有多少个不同的朋友证号。
输入格式:
输入第一行给出正整数 N。随后一行给出 N 个正整数,数字间以空格分隔。题目保证所有数字小于 104。
输出格式:
首先第一行输出给定数字中不同的朋友证号的个数;随后一行按递增顺序输出这些朋友证号,数字间隔一个空格,且行末不得有多余空格。
输入样例:
8
123 899 51 998 27 33 36 12
输出样例:
4
3 6 9 26
1 #include<stdio.h>
2 #include<math.h>
3 #include<string.h>
4 #include<stdlib.h>
5 int cmp(const void *p,const void *q)
6 {
7 int x=*(int *)p;
8 int y=*(int *)q;
9 if(x>y)
10 return 1;
11 else
12 return -1;
13 return 0;
14 }
15 int main()
16 {
17 int N;
18 scanf("%d",&N);
19 char num[5];
20 int sumzu[N];
21 for(int i=0;i<N;i++)
22 {
23 scanf(" %s",num);
24 int sum=0;
25 int len=strlen(num);
26 for(int j=0;j<len;j++)
27 {
28 sum=sum+(num[j]-'0');
29 }
30 sumzu[i]=sum;
31 }
32 qsort(sumzu,N,sizeof(int),cmp);
33 int sumzu1[N];
34 int t=0;
35 for(int i=0;i<N;i++)
36 {
37 for(int j=0;j<N;j++)
38 {
39 if(sumzu[i]==sumzu[j]&&j!=i&&sumzu[i]!=-9999)
40 {
41 sumzu[j]=-9999;
42 }
43 }
44 if(sumzu[i]!=-9999)
45 sumzu1[t++]=sumzu[i];
46 }
47 printf("%d
",t);
48 for(int i=0;i<t-1;i++)
49 printf("%d ",sumzu1[i]);
50 printf("%d
",sumzu1[t-1]);
51 return 0;
52 }