乐逍遥xwl

导航

1064 朋友数

如果两个整数各位数字的和是一样的,则被称为是“朋友数”,而那个公共的和就是它们的“朋友证号”。例如 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\n",t);
48     for(int i=0;i<t-1;i++)
49         printf("%d ",sumzu1[i]);
50     printf("%d\n",sumzu1[t-1]);
51     return 0;
52 }

 

 

posted on 2019-03-05 21:00  乐逍遥xwl  阅读(328)  评论(0编辑  收藏  举报